Commit | Line | Data |
---|---|---|
1da177e4 | 1 | /* |
fa90c54f | 2 | * QLogic Fibre Channel HBA Driver |
01e58d8e | 3 | * Copyright (c) 2003-2008 QLogic Corporation |
1da177e4 | 4 | * |
fa90c54f | 5 | * See LICENSE.qla2xxx for copyright and licensing details. |
1da177e4 LT |
6 | */ |
7 | ||
1da177e4 LT |
8 | /* |
9 | * qla2x00_debounce_register | |
10 | * Debounce register. | |
11 | * | |
12 | * Input: | |
13 | * port = register address. | |
14 | * | |
15 | * Returns: | |
16 | * register value. | |
17 | */ | |
18 | static __inline__ uint16_t | |
fa2a1ce5 | 19 | qla2x00_debounce_register(volatile uint16_t __iomem *addr) |
1da177e4 LT |
20 | { |
21 | volatile uint16_t first; | |
22 | volatile uint16_t second; | |
23 | ||
24 | do { | |
25 | first = RD_REG_WORD(addr); | |
26 | barrier(); | |
27 | cpu_relax(); | |
28 | second = RD_REG_WORD(addr); | |
29 | } while (first != second); | |
30 | ||
31 | return (first); | |
32 | } | |
33 | ||
fa2a1ce5 | 34 | static inline void |
1da177e4 LT |
35 | qla2x00_poll(scsi_qla_host_t *ha) |
36 | { | |
fd34f556 | 37 | ha->isp_ops->intr_handler(0, ha); |
1da177e4 LT |
38 | } |
39 | ||
da4541b6 SJ |
40 | static __inline__ scsi_qla_host_t * |
41 | to_qla_parent(scsi_qla_host_t *ha) | |
42 | { | |
43 | return ha->parent ? ha->parent : ha; | |
44 | } | |
45 | ||
1da177e4 LT |
46 | /** |
47 | * qla2x00_issue_marker() - Issue a Marker IOCB if necessary. | |
48 | * @ha: HA context | |
49 | * @ha_locked: is function called with the hardware lock | |
50 | * | |
51 | * Returns non-zero if a failure occured, else zero. | |
52 | */ | |
53 | static inline int | |
54 | qla2x00_issue_marker(scsi_qla_host_t *ha, int ha_locked) | |
55 | { | |
56 | /* Send marker if required */ | |
57 | if (ha->marker_needed != 0) { | |
58 | if (ha_locked) { | |
59 | if (__qla2x00_marker(ha, 0, 0, MK_SYNC_ALL) != | |
60 | QLA_SUCCESS) | |
61 | return (QLA_FUNCTION_FAILED); | |
62 | } else { | |
63 | if (qla2x00_marker(ha, 0, 0, MK_SYNC_ALL) != | |
64 | QLA_SUCCESS) | |
65 | return (QLA_FUNCTION_FAILED); | |
66 | } | |
67 | ha->marker_needed = 0; | |
68 | } | |
69 | return (QLA_SUCCESS); | |
70 | } | |
71 | ||
2b6c0cee AV |
72 | static inline uint8_t * |
73 | host_to_fcp_swap(uint8_t *fcp, uint32_t bsize) | |
74 | { | |
75 | uint32_t *ifcp = (uint32_t *) fcp; | |
76 | uint32_t *ofcp = (uint32_t *) fcp; | |
77 | uint32_t iter = bsize >> 2; | |
78 | ||
79 | for (; iter ; iter--) | |
80 | *ofcp++ = swab32(*ifcp++); | |
81 | ||
82 | return fcp; | |
83 | } | |
3d71644c | 84 | |
3d71644c AV |
85 | static inline int |
86 | qla2x00_is_reserved_id(scsi_qla_host_t *ha, uint16_t loop_id) | |
87 | { | |
e428924c | 88 | if (IS_FWI2_CAPABLE(ha)) |
3d71644c AV |
89 | return (loop_id > NPH_LAST_HANDLE); |
90 | ||
91 | return ((loop_id > ha->last_loop_id && loop_id < SNS_FIRST_LOOP_ID) || | |
92 | loop_id == MANAGEMENT_SERVER || loop_id == BROADCAST); | |
93 | }; |