]>
Commit | Line | Data |
---|---|---|
1 | /* | |
2 | * QLogic Fibre Channel HBA Driver | |
3 | * Copyright (c) 2003-2008 QLogic Corporation | |
4 | * | |
5 | * See LICENSE.qla2xxx for copyright and licensing details. | |
6 | */ | |
7 | ||
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 | |
19 | qla2x00_debounce_register(volatile uint16_t __iomem *addr) | |
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 | ||
34 | static inline void | |
35 | qla2x00_poll(struct rsp_que *rsp) | |
36 | { | |
37 | unsigned long flags; | |
38 | struct qla_hw_data *ha = rsp->hw; | |
39 | local_irq_save(flags); | |
40 | ha->isp_ops->intr_handler(0, rsp); | |
41 | local_irq_restore(flags); | |
42 | } | |
43 | ||
44 | static inline uint8_t * | |
45 | host_to_fcp_swap(uint8_t *fcp, uint32_t bsize) | |
46 | { | |
47 | uint32_t *ifcp = (uint32_t *) fcp; | |
48 | uint32_t *ofcp = (uint32_t *) fcp; | |
49 | uint32_t iter = bsize >> 2; | |
50 | ||
51 | for (; iter ; iter--) | |
52 | *ofcp++ = swab32(*ifcp++); | |
53 | ||
54 | return fcp; | |
55 | } | |
56 | ||
57 | static inline int | |
58 | qla2x00_is_reserved_id(scsi_qla_host_t *vha, uint16_t loop_id) | |
59 | { | |
60 | struct qla_hw_data *ha = vha->hw; | |
61 | if (IS_FWI2_CAPABLE(ha)) | |
62 | return (loop_id > NPH_LAST_HANDLE); | |
63 | ||
64 | return ((loop_id > ha->max_loop_id && loop_id < SNS_FIRST_LOOP_ID) || | |
65 | loop_id == MANAGEMENT_SERVER || loop_id == BROADCAST); | |
66 | }; |