aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/scsi/aic94xx/aic94xx_dev.c6
-rw-r--r--drivers/scsi/aic94xx/aic94xx_dump.c4
-rw-r--r--drivers/scsi/aic94xx/aic94xx_hwi.c2
-rw-r--r--drivers/scsi/aic94xx/aic94xx_scb.c6
-rw-r--r--drivers/scsi/aic94xx/aic94xx_task.c30
-rw-r--r--drivers/scsi/aic94xx/aic94xx_tmf.c12
-rw-r--r--drivers/scsi/libsas/sas_discover.c2
-rw-r--r--drivers/scsi/libsas/sas_expander.c6
-rw-r--r--drivers/scsi/libsas/sas_internal.h2
-rw-r--r--include/scsi/libsas.h18
-rw-r--r--include/scsi/sas.h13
-rw-r--r--include/scsi/scsi_transport_sas.h8
12 files changed, 51 insertions, 58 deletions
diff --git a/drivers/scsi/aic94xx/aic94xx_dev.c b/drivers/scsi/aic94xx/aic94xx_dev.c
index 3dce618bf414..72042cae7768 100644
--- a/drivers/scsi/aic94xx/aic94xx_dev.c
+++ b/drivers/scsi/aic94xx/aic94xx_dev.c
@@ -165,7 +165,7 @@ static int asd_init_target_ddb(struct domain_device *dev)
165 if (dev->port->oob_mode != SATA_OOB_MODE) { 165 if (dev->port->oob_mode != SATA_OOB_MODE) {
166 flags |= OPEN_REQUIRED; 166 flags |= OPEN_REQUIRED;
167 if ((dev->dev_type == SATA_DEV) || 167 if ((dev->dev_type == SATA_DEV) ||
168 (dev->tproto & SAS_PROTO_STP)) { 168 (dev->tproto & SAS_PROTOCOL_STP)) {
169 struct smp_resp *rps_resp = &dev->sata_dev.rps_resp; 169 struct smp_resp *rps_resp = &dev->sata_dev.rps_resp;
170 if (rps_resp->frame_type == SMP_RESPONSE && 170 if (rps_resp->frame_type == SMP_RESPONSE &&
171 rps_resp->function == SMP_REPORT_PHY_SATA && 171 rps_resp->function == SMP_REPORT_PHY_SATA &&
@@ -193,7 +193,7 @@ static int asd_init_target_ddb(struct domain_device *dev)
193 asd_ddbsite_write_byte(asd_ha, ddb, DDB_TARG_FLAGS, flags); 193 asd_ddbsite_write_byte(asd_ha, ddb, DDB_TARG_FLAGS, flags);
194 194
195 flags = 0; 195 flags = 0;
196 if (dev->tproto & SAS_PROTO_STP) 196 if (dev->tproto & SAS_PROTOCOL_STP)
197 flags |= STP_CL_POL_NO_TX; 197 flags |= STP_CL_POL_NO_TX;
198 asd_ddbsite_write_byte(asd_ha, ddb, DDB_TARG_FLAGS2, flags); 198 asd_ddbsite_write_byte(asd_ha, ddb, DDB_TARG_FLAGS2, flags);
199 199
@@ -201,7 +201,7 @@ static int asd_init_target_ddb(struct domain_device *dev)
201 asd_ddbsite_write_word(asd_ha, ddb, SEND_QUEUE_TAIL, 0xFFFF); 201 asd_ddbsite_write_word(asd_ha, ddb, SEND_QUEUE_TAIL, 0xFFFF);
202 asd_ddbsite_write_word(asd_ha, ddb, SISTER_DDB, 0xFFFF); 202 asd_ddbsite_write_word(asd_ha, ddb, SISTER_DDB, 0xFFFF);
203 203
204 if (dev->dev_type == SATA_DEV || (dev->tproto & SAS_PROTO_STP)) { 204 if (dev->dev_type == SATA_DEV || (dev->tproto & SAS_PROTOCOL_STP)) {
205 i = asd_init_sata(dev); 205 i = asd_init_sata(dev);
206 if (i < 0) { 206 if (i < 0) {
207 asd_free_ddb(asd_ha, ddb); 207 asd_free_ddb(asd_ha, ddb);
diff --git a/drivers/scsi/aic94xx/aic94xx_dump.c b/drivers/scsi/aic94xx/aic94xx_dump.c
index 6bd8e3059d27..3d8c4ff1f2ef 100644
--- a/drivers/scsi/aic94xx/aic94xx_dump.c
+++ b/drivers/scsi/aic94xx/aic94xx_dump.c
@@ -903,11 +903,11 @@ void asd_dump_frame_rcvd(struct asd_phy *phy,
903 int i; 903 int i;
904 904
905 switch ((dl->status_block[1] & 0x70) >> 3) { 905 switch ((dl->status_block[1] & 0x70) >> 3) {
906 case SAS_PROTO_STP: 906 case SAS_PROTOCOL_STP:
907 ASD_DPRINTK("STP proto device-to-host FIS:\n"); 907 ASD_DPRINTK("STP proto device-to-host FIS:\n");
908 break; 908 break;
909 default: 909 default:
910 case SAS_PROTO_SSP: 910 case SAS_PROTOCOL_SSP:
911 ASD_DPRINTK("SAS proto IDENTIFY:\n"); 911 ASD_DPRINTK("SAS proto IDENTIFY:\n");
912 break; 912 break;
913 } 913 }
diff --git a/drivers/scsi/aic94xx/aic94xx_hwi.c b/drivers/scsi/aic94xx/aic94xx_hwi.c
index 0cd7eed9196c..098b5f39cd31 100644
--- a/drivers/scsi/aic94xx/aic94xx_hwi.c
+++ b/drivers/scsi/aic94xx/aic94xx_hwi.c
@@ -91,7 +91,7 @@ static int asd_init_phy(struct asd_phy *phy)
91 91
92 sas_phy->enabled = 1; 92 sas_phy->enabled = 1;
93 sas_phy->class = SAS; 93 sas_phy->class = SAS;
94 sas_phy->iproto = SAS_PROTO_ALL; 94 sas_phy->iproto = SAS_PROTOCOL_ALL;
95 sas_phy->tproto = 0; 95 sas_phy->tproto = 0;
96 sas_phy->type = PHY_TYPE_PHYSICAL; 96 sas_phy->type = PHY_TYPE_PHYSICAL;
97 sas_phy->role = PHY_ROLE_INITIATOR; 97 sas_phy->role = PHY_ROLE_INITIATOR;
diff --git a/drivers/scsi/aic94xx/aic94xx_scb.c b/drivers/scsi/aic94xx/aic94xx_scb.c
index db6ab1a3b81e..0febad4dd75f 100644
--- a/drivers/scsi/aic94xx/aic94xx_scb.c
+++ b/drivers/scsi/aic94xx/aic94xx_scb.c
@@ -788,12 +788,12 @@ void asd_build_control_phy(struct asd_ascb *ascb, int phy_id, u8 subfunc)
788 788
789 /* initiator port settings are in the hi nibble */ 789 /* initiator port settings are in the hi nibble */
790 if (phy->sas_phy.role == PHY_ROLE_INITIATOR) 790 if (phy->sas_phy.role == PHY_ROLE_INITIATOR)
791 control_phy->port_type = SAS_PROTO_ALL << 4; 791 control_phy->port_type = SAS_PROTOCOL_ALL << 4;
792 else if (phy->sas_phy.role == PHY_ROLE_TARGET) 792 else if (phy->sas_phy.role == PHY_ROLE_TARGET)
793 control_phy->port_type = SAS_PROTO_ALL; 793 control_phy->port_type = SAS_PROTOCOL_ALL;
794 else 794 else
795 control_phy->port_type = 795 control_phy->port_type =
796 (SAS_PROTO_ALL << 4) | SAS_PROTO_ALL; 796 (SAS_PROTOCOL_ALL << 4) | SAS_PROTOCOL_ALL;
797 797
798 /* link reset retries, this should be nominal */ 798 /* link reset retries, this should be nominal */
799 control_phy->link_reset_retries = 10; 799 control_phy->link_reset_retries = 10;
diff --git a/drivers/scsi/aic94xx/aic94xx_task.c b/drivers/scsi/aic94xx/aic94xx_task.c
index ee0a98bffcd4..663fdef38c52 100644
--- a/drivers/scsi/aic94xx/aic94xx_task.c
+++ b/drivers/scsi/aic94xx/aic94xx_task.c
@@ -187,7 +187,7 @@ static void asd_get_response_tasklet(struct asd_ascb *ascb,
187 ts->buf_valid_size = 0; 187 ts->buf_valid_size = 0;
188 edb = asd_ha->seq.edb_arr[edb_id + escb->edb_index]; 188 edb = asd_ha->seq.edb_arr[edb_id + escb->edb_index];
189 r = edb->vaddr; 189 r = edb->vaddr;
190 if (task->task_proto == SAS_PROTO_SSP) { 190 if (task->task_proto == SAS_PROTOCOL_SSP) {
191 struct ssp_response_iu *iu = 191 struct ssp_response_iu *iu =
192 r + 16 + sizeof(struct ssp_frame_hdr); 192 r + 16 + sizeof(struct ssp_frame_hdr);
193 193
@@ -341,14 +341,14 @@ Again:
341 } 341 }
342 342
343 switch (task->task_proto) { 343 switch (task->task_proto) {
344 case SATA_PROTO: 344 case SAS_PROTOCOL_SATA:
345 case SAS_PROTO_STP: 345 case SAS_PROTOCOL_STP:
346 asd_unbuild_ata_ascb(ascb); 346 asd_unbuild_ata_ascb(ascb);
347 break; 347 break;
348 case SAS_PROTO_SMP: 348 case SAS_PROTOCOL_SMP:
349 asd_unbuild_smp_ascb(ascb); 349 asd_unbuild_smp_ascb(ascb);
350 break; 350 break;
351 case SAS_PROTO_SSP: 351 case SAS_PROTOCOL_SSP:
352 asd_unbuild_ssp_ascb(ascb); 352 asd_unbuild_ssp_ascb(ascb);
353 default: 353 default:
354 break; 354 break;
@@ -586,17 +586,17 @@ int asd_execute_task(struct sas_task *task, const int num,
586 list_for_each_entry(a, &alist, list) { 586 list_for_each_entry(a, &alist, list) {
587 t = a->uldd_task; 587 t = a->uldd_task;
588 a->uldd_timer = 1; 588 a->uldd_timer = 1;
589 if (t->task_proto & SAS_PROTO_STP) 589 if (t->task_proto & SAS_PROTOCOL_STP)
590 t->task_proto = SAS_PROTO_STP; 590 t->task_proto = SAS_PROTOCOL_STP;
591 switch (t->task_proto) { 591 switch (t->task_proto) {
592 case SATA_PROTO: 592 case SAS_PROTOCOL_SATA:
593 case SAS_PROTO_STP: 593 case SAS_PROTOCOL_STP:
594 res = asd_build_ata_ascb(a, t, gfp_flags); 594 res = asd_build_ata_ascb(a, t, gfp_flags);
595 break; 595 break;
596 case SAS_PROTO_SMP: 596 case SAS_PROTOCOL_SMP:
597 res = asd_build_smp_ascb(a, t, gfp_flags); 597 res = asd_build_smp_ascb(a, t, gfp_flags);
598 break; 598 break;
599 case SAS_PROTO_SSP: 599 case SAS_PROTOCOL_SSP:
600 res = asd_build_ssp_ascb(a, t, gfp_flags); 600 res = asd_build_ssp_ascb(a, t, gfp_flags);
601 break; 601 break;
602 default: 602 default:
@@ -633,14 +633,14 @@ out_err_unmap:
633 t->task_state_flags &= ~SAS_TASK_AT_INITIATOR; 633 t->task_state_flags &= ~SAS_TASK_AT_INITIATOR;
634 spin_unlock_irqrestore(&t->task_state_lock, flags); 634 spin_unlock_irqrestore(&t->task_state_lock, flags);
635 switch (t->task_proto) { 635 switch (t->task_proto) {
636 case SATA_PROTO: 636 case SAS_PROTOCOL_SATA:
637 case SAS_PROTO_STP: 637 case SAS_PROTOCOL_STP:
638 asd_unbuild_ata_ascb(a); 638 asd_unbuild_ata_ascb(a);
639 break; 639 break;
640 case SAS_PROTO_SMP: 640 case SAS_PROTOCOL_SMP:
641 asd_unbuild_smp_ascb(a); 641 asd_unbuild_smp_ascb(a);
642 break; 642 break;
643 case SAS_PROTO_SSP: 643 case SAS_PROTOCOL_SSP:
644 asd_unbuild_ssp_ascb(a); 644 asd_unbuild_ssp_ascb(a);
645 default: 645 default:
646 break; 646 break;
diff --git a/drivers/scsi/aic94xx/aic94xx_tmf.c b/drivers/scsi/aic94xx/aic94xx_tmf.c
index c0d0b7d7a8ce..87b2f6e6adfe 100644
--- a/drivers/scsi/aic94xx/aic94xx_tmf.c
+++ b/drivers/scsi/aic94xx/aic94xx_tmf.c
@@ -372,21 +372,21 @@ int asd_abort_task(struct sas_task *task)
372 scb->header.opcode = ABORT_TASK; 372 scb->header.opcode = ABORT_TASK;
373 373
374 switch (task->task_proto) { 374 switch (task->task_proto) {
375 case SATA_PROTO: 375 case SAS_PROTOCOL_SATA:
376 case SAS_PROTO_STP: 376 case SAS_PROTOCOL_STP:
377 scb->abort_task.proto_conn_rate = (1 << 5); /* STP */ 377 scb->abort_task.proto_conn_rate = (1 << 5); /* STP */
378 break; 378 break;
379 case SAS_PROTO_SSP: 379 case SAS_PROTOCOL_SSP:
380 scb->abort_task.proto_conn_rate = (1 << 4); /* SSP */ 380 scb->abort_task.proto_conn_rate = (1 << 4); /* SSP */
381 scb->abort_task.proto_conn_rate |= task->dev->linkrate; 381 scb->abort_task.proto_conn_rate |= task->dev->linkrate;
382 break; 382 break;
383 case SAS_PROTO_SMP: 383 case SAS_PROTOCOL_SMP:
384 break; 384 break;
385 default: 385 default:
386 break; 386 break;
387 } 387 }
388 388
389 if (task->task_proto == SAS_PROTO_SSP) { 389 if (task->task_proto == SAS_PROTOCOL_SSP) {
390 scb->abort_task.ssp_frame.frame_type = SSP_TASK; 390 scb->abort_task.ssp_frame.frame_type = SSP_TASK;
391 memcpy(scb->abort_task.ssp_frame.hashed_dest_addr, 391 memcpy(scb->abort_task.ssp_frame.hashed_dest_addr,
392 task->dev->hashed_sas_addr, HASHED_SAS_ADDR_SIZE); 392 task->dev->hashed_sas_addr, HASHED_SAS_ADDR_SIZE);
@@ -512,7 +512,7 @@ static int asd_initiate_ssp_tmf(struct domain_device *dev, u8 *lun,
512 int res = 1; 512 int res = 1;
513 struct scb *scb; 513 struct scb *scb;
514 514
515 if (!(dev->tproto & SAS_PROTO_SSP)) 515 if (!(dev->tproto & SAS_PROTOCOL_SSP))
516 return TMF_RESP_FUNC_ESUPP; 516 return TMF_RESP_FUNC_ESUPP;
517 517
518 ascb = asd_ascb_alloc_list(asd_ha, &res, GFP_KERNEL); 518 ascb = asd_ascb_alloc_list(asd_ha, &res, GFP_KERNEL);
diff --git a/drivers/scsi/libsas/sas_discover.c b/drivers/scsi/libsas/sas_discover.c
index 5f3a0d7b18de..31b9af224243 100644
--- a/drivers/scsi/libsas/sas_discover.c
+++ b/drivers/scsi/libsas/sas_discover.c
@@ -98,7 +98,7 @@ static int sas_get_port_device(struct asd_sas_port *port)
98 dev->dev_type = SATA_PM; 98 dev->dev_type = SATA_PM;
99 else 99 else
100 dev->dev_type = SATA_DEV; 100 dev->dev_type = SATA_DEV;
101 dev->tproto = SATA_PROTO; 101 dev->tproto = SAS_PROTOCOL_SATA;
102 } else { 102 } else {
103 struct sas_identify_frame *id = 103 struct sas_identify_frame *id =
104 (struct sas_identify_frame *) dev->frame_rcvd; 104 (struct sas_identify_frame *) dev->frame_rcvd;
diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_expander.c
index 8727436b222d..27674fe468f5 100644
--- a/drivers/scsi/libsas/sas_expander.c
+++ b/drivers/scsi/libsas/sas_expander.c
@@ -656,9 +656,9 @@ static struct domain_device *sas_ex_discover_end_dev(
656 sas_ex_get_linkrate(parent, child, phy); 656 sas_ex_get_linkrate(parent, child, phy);
657 657
658#ifdef CONFIG_SCSI_SAS_ATA 658#ifdef CONFIG_SCSI_SAS_ATA
659 if ((phy->attached_tproto & SAS_PROTO_STP) || phy->attached_sata_dev) { 659 if ((phy->attached_tproto & SAS_PROTOCOL_STP) || phy->attached_sata_dev) {
660 child->dev_type = SATA_DEV; 660 child->dev_type = SATA_DEV;
661 if (phy->attached_tproto & SAS_PROTO_STP) 661 if (phy->attached_tproto & SAS_PROTOCOL_STP)
662 child->tproto = phy->attached_tproto; 662 child->tproto = phy->attached_tproto;
663 if (phy->attached_sata_dev) 663 if (phy->attached_sata_dev)
664 child->tproto |= SATA_DEV; 664 child->tproto |= SATA_DEV;
@@ -695,7 +695,7 @@ static struct domain_device *sas_ex_discover_end_dev(
695 } 695 }
696 } else 696 } else
697#endif 697#endif
698 if (phy->attached_tproto & SAS_PROTO_SSP) { 698 if (phy->attached_tproto & SAS_PROTOCOL_SSP) {
699 child->dev_type = SAS_END_DEV; 699 child->dev_type = SAS_END_DEV;
700 rphy = sas_end_device_alloc(phy->port); 700 rphy = sas_end_device_alloc(phy->port);
701 /* FIXME: error handling */ 701 /* FIXME: error handling */
diff --git a/drivers/scsi/libsas/sas_internal.h b/drivers/scsi/libsas/sas_internal.h
index 2b8213b1832d..baa0666ffa80 100644
--- a/drivers/scsi/libsas/sas_internal.h
+++ b/drivers/scsi/libsas/sas_internal.h
@@ -45,7 +45,7 @@
45void sas_scsi_recover_host(struct Scsi_Host *shost); 45void sas_scsi_recover_host(struct Scsi_Host *shost);
46 46
47int sas_show_class(enum sas_class class, char *buf); 47int sas_show_class(enum sas_class class, char *buf);
48int sas_show_proto(enum sas_proto proto, char *buf); 48int sas_show_proto(enum sas_protocol proto, char *buf);
49int sas_show_linkrate(enum sas_linkrate linkrate, char *buf); 49int sas_show_linkrate(enum sas_linkrate linkrate, char *buf);
50int sas_show_oob_mode(enum sas_oob_mode oob_mode, char *buf); 50int sas_show_oob_mode(enum sas_oob_mode oob_mode, char *buf);
51 51
diff --git a/include/scsi/libsas.h b/include/scsi/libsas.h
index a466c2cb8955..e42374cebf95 100644
--- a/include/scsi/libsas.h
+++ b/include/scsi/libsas.h
@@ -122,8 +122,8 @@ struct ex_phy {
122 u8 attached_sata_dev:1; 122 u8 attached_sata_dev:1;
123 u8 attached_sata_ps:1; 123 u8 attached_sata_ps:1;
124 124
125 enum sas_proto attached_tproto; 125 enum sas_protocol attached_tproto;
126 enum sas_proto attached_iproto; 126 enum sas_protocol attached_iproto;
127 127
128 u8 attached_sas_addr[SAS_ADDR_SIZE]; 128 u8 attached_sas_addr[SAS_ADDR_SIZE];
129 u8 attached_phy_id; 129 u8 attached_phy_id;
@@ -191,8 +191,8 @@ struct domain_device {
191 191
192 struct list_head dev_list_node; 192 struct list_head dev_list_node;
193 193
194 enum sas_proto iproto; 194 enum sas_protocol iproto;
195 enum sas_proto tproto; 195 enum sas_protocol tproto;
196 196
197 struct sas_rphy *rphy; 197 struct sas_rphy *rphy;
198 198
@@ -245,8 +245,8 @@ struct asd_sas_port {
245 enum sas_class class; 245 enum sas_class class;
246 u8 sas_addr[SAS_ADDR_SIZE]; 246 u8 sas_addr[SAS_ADDR_SIZE];
247 u8 attached_sas_addr[SAS_ADDR_SIZE]; 247 u8 attached_sas_addr[SAS_ADDR_SIZE];
248 enum sas_proto iproto; 248 enum sas_protocol iproto;
249 enum sas_proto tproto; 249 enum sas_protocol tproto;
250 250
251 enum sas_oob_mode oob_mode; 251 enum sas_oob_mode oob_mode;
252 252
@@ -289,8 +289,8 @@ struct asd_sas_phy {
289 289
290 int id; /* must be set */ 290 int id; /* must be set */
291 enum sas_class class; 291 enum sas_class class;
292 enum sas_proto iproto; 292 enum sas_protocol iproto;
293 enum sas_proto tproto; 293 enum sas_protocol tproto;
294 294
295 enum sas_phy_type type; 295 enum sas_phy_type type;
296 enum sas_phy_role role; 296 enum sas_phy_role role;
@@ -537,7 +537,7 @@ struct sas_task {
537 spinlock_t task_state_lock; 537 spinlock_t task_state_lock;
538 unsigned task_state_flags; 538 unsigned task_state_flags;
539 539
540 enum sas_proto task_proto; 540 enum sas_protocol task_proto;
541 541
542 /* Used by the discovery code. */ 542 /* Used by the discovery code. */
543 struct timer_list timer; 543 struct timer_list timer;
diff --git a/include/scsi/sas.h b/include/scsi/sas.h
index 2f4b6afa34fc..e9fd02281381 100644
--- a/include/scsi/sas.h
+++ b/include/scsi/sas.h
@@ -102,13 +102,12 @@ enum sas_dev_type {
102 SATA_PM_PORT= 8, 102 SATA_PM_PORT= 8,
103}; 103};
104 104
105/* Partly from IDENTIFY address frame. */ 105enum sas_protocol {
106enum sas_proto { 106 SAS_PROTOCOL_SATA = 0x01,
107 SATA_PROTO = 1, 107 SAS_PROTOCOL_SMP = 0x02,
108 SAS_PROTO_SMP = 2, /* protocol */ 108 SAS_PROTOCOL_STP = 0x04,
109 SAS_PROTO_STP = 4, /* protocol */ 109 SAS_PROTOCOL_SSP = 0x08,
110 SAS_PROTO_SSP = 8, /* protocol */ 110 SAS_PROTOCOL_ALL = 0x0E,
111 SAS_PROTO_ALL = 0xE,
112}; 111};
113 112
114/* From the spec; local phys only */ 113/* From the spec; local phys only */
diff --git a/include/scsi/scsi_transport_sas.h b/include/scsi/scsi_transport_sas.h
index abdfd2e27dd7..007d92904207 100644
--- a/include/scsi/scsi_transport_sas.h
+++ b/include/scsi/scsi_transport_sas.h
@@ -4,6 +4,7 @@
4#include <linux/transport_class.h> 4#include <linux/transport_class.h>
5#include <linux/types.h> 5#include <linux/types.h>
6#include <linux/mutex.h> 6#include <linux/mutex.h>
7#include <scsi/sas.h>
7 8
8struct scsi_transport_template; 9struct scsi_transport_template;
9struct sas_rphy; 10struct sas_rphy;
@@ -16,13 +17,6 @@ enum sas_device_type {
16 SAS_FANOUT_EXPANDER_DEVICE, 17 SAS_FANOUT_EXPANDER_DEVICE,
17}; 18};
18 19
19enum sas_protocol {
20 SAS_PROTOCOL_SATA = 0x01,
21 SAS_PROTOCOL_SMP = 0x02,
22 SAS_PROTOCOL_STP = 0x04,
23 SAS_PROTOCOL_SSP = 0x08,
24};
25
26static inline int sas_protocol_ata(enum sas_protocol proto) 20static inline int sas_protocol_ata(enum sas_protocol proto)
27{ 21{
28 return ((proto & SAS_PROTOCOL_SATA) || 22 return ((proto & SAS_PROTOCOL_SATA) ||