LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH 0/4] firewire: trivial fw-sbp2 updates
@ 2008-02-28 19:50 Stefan Richter
2008-02-28 19:51 ` [PATCH 1/4] firewire: fw-sbp2: remove usages of fw_memcpy_to_be32 Stefan Richter
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Stefan Richter @ 2008-02-28 19:50 UTC (permalink / raw)
To: linux1394-devel; +Cc: linux-kernel
I'll follow up with four simple fw-sbp2 patches:
1/4 firewire: fw-sbp2: remove usages of fw_memcpy_to_be32
2/4 firewire: fw-sbp2: simplify some macros
3/4 firewire: fw-sbp2: remove unnecessary memset
4/4 firewire: fw-sbp2: reduce log noise
drivers/firewire/fw-sbp2.c | 110 ++++++++++++++-----------------------
1 file changed, 44 insertions(+), 66 deletions(-)
--
Stefan Richter
-=====-==--- --=- ===--
http://arcgraph.de/sr/
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/4] firewire: fw-sbp2: remove usages of fw_memcpy_to_be32
2008-02-28 19:50 [PATCH 0/4] firewire: trivial fw-sbp2 updates Stefan Richter
@ 2008-02-28 19:51 ` Stefan Richter
2008-02-28 19:52 ` [PATCH 2/4] firewire: fw-sbp2: simplify some macros Stefan Richter
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Stefan Richter @ 2008-02-28 19:51 UTC (permalink / raw)
To: linux1394-devel; +Cc: linux-kernel
Write directly in big endian instead of byte-swapping after the fact.
This saves a few conversions, lets gcc use constant endianess
conversions where possible, and enables deeper endianess annotation.
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
---
drivers/firewire/fw-sbp2.c | 96 ++++++++++++++++---------------------
1 file changed, 44 insertions(+), 52 deletions(-)
Index: linux/drivers/firewire/fw-sbp2.c
===================================================================
--- linux.orig/drivers/firewire/fw-sbp2.c
+++ linux/drivers/firewire/fw-sbp2.c
@@ -223,8 +223,8 @@ struct sbp2_status {
};
struct sbp2_pointer {
- u32 high;
- u32 low;
+ __be32 high;
+ __be32 low;
};
struct sbp2_orb {
@@ -252,8 +252,8 @@ struct sbp2_management_orb {
struct {
struct sbp2_pointer password;
struct sbp2_pointer response;
- u32 misc;
- u32 length;
+ __be32 misc;
+ __be32 length;
struct sbp2_pointer status_fifo;
} request;
__be32 response[4];
@@ -262,13 +262,10 @@ struct sbp2_management_orb {
struct sbp2_status status;
};
-#define LOGIN_RESPONSE_GET_LOGIN_ID(v) ((v).misc & 0xffff)
-#define LOGIN_RESPONSE_GET_LENGTH(v) (((v).misc >> 16) & 0xffff)
-
struct sbp2_login_response {
- u32 misc;
+ __be32 misc;
struct sbp2_pointer command_block_agent;
- u32 reconnect_hold;
+ __be32 reconnect_hold;
};
#define COMMAND_ORB_DATA_SIZE(v) ((v))
#define COMMAND_ORB_PAGE_SIZE(v) ((v) << 16)
@@ -284,7 +281,7 @@ struct sbp2_command_orb {
struct {
struct sbp2_pointer next;
struct sbp2_pointer data_descriptor;
- u32 misc;
+ __be32 misc;
u8 command_block[12];
} request;
struct scsi_cmnd *cmd;
@@ -453,8 +450,7 @@ sbp2_send_orb(struct sbp2_orb *orb, stru
unsigned long flags;
orb->pointer.high = 0;
- orb->pointer.low = orb->request_bus;
- fw_memcpy_to_be32(&orb->pointer, &orb->pointer, sizeof(orb->pointer));
+ orb->pointer.low = cpu_to_be32(orb->request_bus);
spin_lock_irqsave(&device->card->lock, flags);
list_add_tail(&orb->link, &lu->orb_list);
@@ -530,31 +526,31 @@ sbp2_send_management_orb(struct sbp2_log
if (dma_mapping_error(orb->response_bus))
goto fail_mapping_response;
- orb->request.response.high = 0;
- orb->request.response.low = orb->response_bus;
+ orb->request.response.high = 0;
+ orb->request.response.low = cpu_to_be32(orb->response_bus);
- orb->request.misc =
+ orb->request.misc = cpu_to_be32(
MANAGEMENT_ORB_NOTIFY |
MANAGEMENT_ORB_FUNCTION(function) |
- MANAGEMENT_ORB_LUN(lun_or_login_id);
- orb->request.length =
- MANAGEMENT_ORB_RESPONSE_LENGTH(sizeof(orb->response));
-
- orb->request.status_fifo.high = lu->address_handler.offset >> 32;
- orb->request.status_fifo.low = lu->address_handler.offset;
+ MANAGEMENT_ORB_LUN(lun_or_login_id));
+ orb->request.length = cpu_to_be32(
+ MANAGEMENT_ORB_RESPONSE_LENGTH(sizeof(orb->response)));
+
+ orb->request.status_fifo.high =
+ cpu_to_be32(lu->address_handler.offset >> 32);
+ orb->request.status_fifo.low =
+ cpu_to_be32(lu->address_handler.offset);
if (function == SBP2_LOGIN_REQUEST) {
/* Ask for 2^2 == 4 seconds reconnect grace period */
- orb->request.misc |=
+ orb->request.misc |= cpu_to_be32(
MANAGEMENT_ORB_RECONNECT(2) |
- MANAGEMENT_ORB_EXCLUSIVE(sbp2_param_exclusive_login);
+ MANAGEMENT_ORB_EXCLUSIVE(sbp2_param_exclusive_login));
timeout = lu->tgt->mgt_orb_timeout;
} else {
timeout = SBP2_ORB_TIMEOUT;
}
- fw_memcpy_to_be32(&orb->request, &orb->request, sizeof(orb->request));
-
init_completion(&orb->done);
orb->base.callback = complete_management_orb;
@@ -599,8 +595,7 @@ sbp2_send_management_orb(struct sbp2_log
sizeof(orb->response), DMA_FROM_DEVICE);
fail_mapping_response:
if (response)
- fw_memcpy_from_be32(response,
- orb->response, sizeof(orb->response));
+ memcpy(response, orb->response, sizeof(orb->response));
kref_put(&orb->base.kref, free_orb);
return retval;
@@ -855,11 +850,10 @@ static void sbp2_login(struct work_struc
tgt->address_high = local_node_id << 16;
sbp2_set_generation(lu, generation);
- /* Get command block agent offset and login id. */
lu->command_block_agent_address =
- ((u64) (response.command_block_agent.high & 0xffff) << 32) |
- response.command_block_agent.low;
- lu->login_id = LOGIN_RESPONSE_GET_LOGIN_ID(response);
+ ((u64)(be32_to_cpu(response.command_block_agent.high) & 0xffff)
+ << 32) | be32_to_cpu(response.command_block_agent.low);
+ lu->login_id = be32_to_cpu(response.misc) & 0xffff;
fw_notify("%s: logged in to LUN %04x (%d retries)\n",
tgt->bus_id, lu->lun, lu->retries);
@@ -1338,9 +1332,12 @@ sbp2_map_scatterlist(struct sbp2_command
* tables.
*/
if (count == 1 && sg_dma_len(sg) < SBP2_MAX_SG_ELEMENT_LENGTH) {
- orb->request.data_descriptor.high = lu->tgt->address_high;
- orb->request.data_descriptor.low = sg_dma_address(sg);
- orb->request.misc |= COMMAND_ORB_DATA_SIZE(sg_dma_len(sg));
+ orb->request.data_descriptor.high =
+ cpu_to_be32(lu->tgt->address_high);
+ orb->request.data_descriptor.low =
+ cpu_to_be32(sg_dma_address(sg));
+ orb->request.misc |=
+ cpu_to_be32(COMMAND_ORB_DATA_SIZE(sg_dma_len(sg)));
return 0;
}
@@ -1361,16 +1358,14 @@ sbp2_map_scatterlist(struct sbp2_command
goto fail_page_table;
}
l = min(sg_len, SBP2_MAX_SG_ELEMENT_LENGTH);
- orb->page_table[j].low = sg_addr;
- orb->page_table[j].high = (l << 16);
+ orb->page_table[j].low = cpu_to_be32(sg_addr);
+ orb->page_table[j].high = cpu_to_be32(l << 16);
sg_addr += l;
sg_len -= l;
j++;
}
}
- fw_memcpy_to_be32(orb->page_table, orb->page_table,
- sizeof(orb->page_table[0]) * j);
orb->page_table_bus =
dma_map_single(device->card->device, orb->page_table,
sizeof(orb->page_table), DMA_TO_DEVICE);
@@ -1384,11 +1379,10 @@ sbp2_map_scatterlist(struct sbp2_command
* initiator (i.e. us), but data_descriptor can refer to data
* on other nodes so we need to put our ID in descriptor.high.
*/
- orb->request.data_descriptor.high = lu->tgt->address_high;
- orb->request.data_descriptor.low = orb->page_table_bus;
- orb->request.misc |=
- COMMAND_ORB_PAGE_TABLE_PRESENT |
- COMMAND_ORB_DATA_SIZE(j);
+ orb->request.data_descriptor.high = cpu_to_be32(lu->tgt->address_high);
+ orb->request.data_descriptor.low = cpu_to_be32(orb->page_table_bus);
+ orb->request.misc |= cpu_to_be32(COMMAND_ORB_PAGE_TABLE_PRESENT |
+ COMMAND_ORB_DATA_SIZE(j));
return 0;
@@ -1434,7 +1428,7 @@ static int sbp2_scsi_queuecommand(struct
orb->done = done;
orb->cmd = cmd;
- orb->request.next.high = SBP2_ORB_NULL;
+ orb->request.next.high = cpu_to_be32(SBP2_ORB_NULL);
orb->request.next.low = 0x0;
/*
* At speed 100 we can do 512 bytes per packet, at speed 200,
@@ -1444,23 +1438,21 @@ static int sbp2_scsi_queuecommand(struct
*/
max_payload = min(device->max_speed + 7,
device->card->max_receive - 1);
- orb->request.misc =
+ orb->request.misc = cpu_to_be32(
COMMAND_ORB_MAX_PAYLOAD(max_payload) |
COMMAND_ORB_SPEED(device->max_speed) |
- COMMAND_ORB_NOTIFY;
+ COMMAND_ORB_NOTIFY);
if (cmd->sc_data_direction == DMA_FROM_DEVICE)
- orb->request.misc |=
- COMMAND_ORB_DIRECTION(SBP2_DIRECTION_FROM_MEDIA);
+ orb->request.misc |= cpu_to_be32(
+ COMMAND_ORB_DIRECTION(SBP2_DIRECTION_FROM_MEDIA));
else if (cmd->sc_data_direction == DMA_TO_DEVICE)
- orb->request.misc |=
- COMMAND_ORB_DIRECTION(SBP2_DIRECTION_TO_MEDIA);
+ orb->request.misc |= cpu_to_be32(
+ COMMAND_ORB_DIRECTION(SBP2_DIRECTION_TO_MEDIA));
if (scsi_sg_count(cmd) && sbp2_map_scatterlist(orb, device, lu) < 0)
goto out;
- fw_memcpy_to_be32(&orb->request, &orb->request, sizeof(orb->request));
-
memset(orb->request.command_block,
0, sizeof(orb->request.command_block));
memcpy(orb->request.command_block, cmd->cmnd, COMMAND_SIZE(*cmd->cmnd));
--
Stefan Richter
-=====-==--- --=- ===--
http://arcgraph.de/sr/
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 2/4] firewire: fw-sbp2: simplify some macros
2008-02-28 19:50 [PATCH 0/4] firewire: trivial fw-sbp2 updates Stefan Richter
2008-02-28 19:51 ` [PATCH 1/4] firewire: fw-sbp2: remove usages of fw_memcpy_to_be32 Stefan Richter
@ 2008-02-28 19:52 ` Stefan Richter
2008-02-28 19:52 ` [PATCH 3/4] firewire: fw-sbp2: remove unnecessary memset Stefan Richter
2008-02-28 19:53 ` [PATCH 4/4] firewire: fw-sbp2: reduce log noise Stefan Richter
3 siblings, 0 replies; 5+ messages in thread
From: Stefan Richter @ 2008-02-28 19:52 UTC (permalink / raw)
To: linux1394-devel; +Cc: linux-kernel
How hard can it be to switch on one bit? :-)
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
---
drivers/firewire/fw-sbp2.c | 11 ++---------
1 file changed, 2 insertions(+), 9 deletions(-)
Index: linux/drivers/firewire/fw-sbp2.c
===================================================================
--- linux.orig/drivers/firewire/fw-sbp2.c
+++ linux/drivers/firewire/fw-sbp2.c
@@ -174,9 +174,6 @@ struct sbp2_target {
#define SBP2_ORB_NULL 0x80000000
#define SBP2_MAX_SG_ELEMENT_LENGTH 0xf000
-#define SBP2_DIRECTION_TO_MEDIA 0x0
-#define SBP2_DIRECTION_FROM_MEDIA 0x1
-
/* Unit directory keys */
#define SBP2_CSR_UNIT_CHARACTERISTICS 0x3a
#define SBP2_CSR_FIRMWARE_REVISION 0x3c
@@ -272,7 +269,7 @@ struct sbp2_login_response {
#define COMMAND_ORB_PAGE_TABLE_PRESENT ((1) << 19)
#define COMMAND_ORB_MAX_PAYLOAD(v) ((v) << 20)
#define COMMAND_ORB_SPEED(v) ((v) << 24)
-#define COMMAND_ORB_DIRECTION(v) ((v) << 27)
+#define COMMAND_ORB_DIRECTION ((1) << 27)
#define COMMAND_ORB_REQUEST_FORMAT(v) ((v) << 29)
#define COMMAND_ORB_NOTIFY ((1) << 31)
@@ -1444,11 +1441,7 @@ static int sbp2_scsi_queuecommand(struct
COMMAND_ORB_NOTIFY);
if (cmd->sc_data_direction == DMA_FROM_DEVICE)
- orb->request.misc |= cpu_to_be32(
- COMMAND_ORB_DIRECTION(SBP2_DIRECTION_FROM_MEDIA));
- else if (cmd->sc_data_direction == DMA_TO_DEVICE)
- orb->request.misc |= cpu_to_be32(
- COMMAND_ORB_DIRECTION(SBP2_DIRECTION_TO_MEDIA));
+ orb->request.misc |= cpu_to_be32(COMMAND_ORB_DIRECTION);
if (scsi_sg_count(cmd) && sbp2_map_scatterlist(orb, device, lu) < 0)
goto out;
--
Stefan Richter
-=====-==--- --=- ===--
http://arcgraph.de/sr/
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 3/4] firewire: fw-sbp2: remove unnecessary memset
2008-02-28 19:50 [PATCH 0/4] firewire: trivial fw-sbp2 updates Stefan Richter
2008-02-28 19:51 ` [PATCH 1/4] firewire: fw-sbp2: remove usages of fw_memcpy_to_be32 Stefan Richter
2008-02-28 19:52 ` [PATCH 2/4] firewire: fw-sbp2: simplify some macros Stefan Richter
@ 2008-02-28 19:52 ` Stefan Richter
2008-02-28 19:53 ` [PATCH 4/4] firewire: fw-sbp2: reduce log noise Stefan Richter
3 siblings, 0 replies; 5+ messages in thread
From: Stefan Richter @ 2008-02-28 19:52 UTC (permalink / raw)
To: linux1394-devel; +Cc: linux-kernel
orb came from kzalloc.
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
---
drivers/firewire/fw-sbp2.c | 3 ---
1 file changed, 3 deletions(-)
Index: linux/drivers/firewire/fw-sbp2.c
===================================================================
--- linux.orig/drivers/firewire/fw-sbp2.c
+++ linux/drivers/firewire/fw-sbp2.c
@@ -1426,7 +1426,6 @@ static int sbp2_scsi_queuecommand(struct
orb->cmd = cmd;
orb->request.next.high = cpu_to_be32(SBP2_ORB_NULL);
- orb->request.next.low = 0x0;
/*
* At speed 100 we can do 512 bytes per packet, at speed 200,
* 1024 bytes per packet etc. The SBP-2 max_payload field
@@ -1446,8 +1445,6 @@ static int sbp2_scsi_queuecommand(struct
if (scsi_sg_count(cmd) && sbp2_map_scatterlist(orb, device, lu) < 0)
goto out;
- memset(orb->request.command_block,
- 0, sizeof(orb->request.command_block));
memcpy(orb->request.command_block, cmd->cmnd, COMMAND_SIZE(*cmd->cmnd));
orb->base.callback = complete_command_orb;
--
Stefan Richter
-=====-==--- --=- ===--
http://arcgraph.de/sr/
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 4/4] firewire: fw-sbp2: reduce log noise
2008-02-28 19:50 [PATCH 0/4] firewire: trivial fw-sbp2 updates Stefan Richter
` (2 preceding siblings ...)
2008-02-28 19:52 ` [PATCH 3/4] firewire: fw-sbp2: remove unnecessary memset Stefan Richter
@ 2008-02-28 19:53 ` Stefan Richter
3 siblings, 0 replies; 5+ messages in thread
From: Stefan Richter @ 2008-02-28 19:53 UTC (permalink / raw)
To: linux1394-devel; +Cc: linux-kernel
The block/unblock logic is now sufficiently tested.
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
---
To be postponed after 2.6.25.
drivers/firewire/fw-sbp2.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
Index: linux/drivers/firewire/fw-sbp2.c
===================================================================
--- linux.orig/drivers/firewire/fw-sbp2.c
+++ linux/drivers/firewire/fw-sbp2.c
@@ -687,10 +687,8 @@ static void sbp2_conditionally_block(str
if (!tgt->dont_block && !lu->blocked &&
lu->generation != card->generation) {
lu->blocked = true;
- if (++tgt->blocked == 1) {
+ if (++tgt->blocked == 1)
scsi_block_requests(shost);
- fw_notify("blocked %s\n", lu->tgt->bus_id);
- }
}
spin_unlock_irqrestore(&card->lock, flags);
}
@@ -717,10 +715,8 @@ static void sbp2_conditionally_unblock(s
}
spin_unlock_irqrestore(&card->lock, flags);
- if (unblock) {
+ if (unblock)
scsi_unblock_requests(shost);
- fw_notify("unblocked %s\n", lu->tgt->bus_id);
- }
}
/*
--
Stefan Richter
-=====-==--- --=- ===--
http://arcgraph.de/sr/
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2008-02-28 19:58 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-02-28 19:50 [PATCH 0/4] firewire: trivial fw-sbp2 updates Stefan Richter
2008-02-28 19:51 ` [PATCH 1/4] firewire: fw-sbp2: remove usages of fw_memcpy_to_be32 Stefan Richter
2008-02-28 19:52 ` [PATCH 2/4] firewire: fw-sbp2: simplify some macros Stefan Richter
2008-02-28 19:52 ` [PATCH 3/4] firewire: fw-sbp2: remove unnecessary memset Stefan Richter
2008-02-28 19:53 ` [PATCH 4/4] firewire: fw-sbp2: reduce log noise Stefan Richter
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).