27 #include <linux/pci.h>
40 (
unsigned long)asd_ha->
io_handle[0].addr + (offs & 0xFF));
47 unsigned long offs,
u16 val)
51 (
unsigned long)asd_ha->
io_handle[0].addr + (offs & 0xFF));
58 unsigned long offs,
u32 val)
62 (
unsigned long)asd_ha->
io_handle[0].addr + (offs & 0xFF));
70 static u8 asd_read_byte(
struct asd_ha_struct *asd_ha,
unsigned long offs)
108 static inline u32 asd_mem_offs_swa(
void)
113 static inline u32 asd_mem_offs_swc(
void)
118 static inline u32 asd_mem_offs_swb(
void)
126 #define ASD_READ_SW(ww, type, ord) \
127 static type asd_read_##ww##_##ord(struct asd_ha_struct *asd_ha, \
130 struct asd_ha_addrspace *io_handle = &asd_ha->io_handle[0]; \
131 u32 map_offs = (reg - io_handle->ww##_base) + asd_mem_offs_##ww();\
132 return asd_read_##ord(asd_ha, (unsigned long)map_offs); \
135 #define ASD_WRITE_SW(ww, type, ord) \
136 static void asd_write_##ww##_##ord(struct asd_ha_struct *asd_ha, \
139 struct asd_ha_addrspace *io_handle = &asd_ha->io_handle[0]; \
140 u32 map_offs = (reg - io_handle->ww##_base) + asd_mem_offs_##ww();\
141 asd_write_##ord(asd_ha, (unsigned long)map_offs, val); \
201 asd_write_swa_byte (asd_ha, reg,val);
204 asd_write_swb_byte (asd_ha, reg, val);
207 asd_write_swc_byte (asd_ha, reg, val);
210 asd_move_swb(asd_ha, reg);
211 asd_write_swb_byte (asd_ha, reg, val);
215 #define ASD_WRITE_REG(type, ord) \
216 void asd_write_reg_##ord (struct asd_ha_struct *asd_ha, u32 reg, type val)\
218 struct asd_ha_addrspace *io_handle=&asd_ha->io_handle[0]; \
219 unsigned long flags; \
220 BUG_ON(reg >= 0xC0000000 || reg < ALL_BASE_ADDR); \
221 spin_lock_irqsave(&asd_ha->iolock, flags); \
222 if (io_handle->swa_base <= reg \
223 && reg < io_handle->swa_base + MBAR0_SWA_SIZE) \
224 asd_write_swa_##ord (asd_ha, reg,val); \
225 else if (io_handle->swb_base <= reg \
226 && reg < io_handle->swb_base + MBAR0_SWB_SIZE) \
227 asd_write_swb_##ord (asd_ha, reg, val); \
228 else if (io_handle->swc_base <= reg \
229 && reg < io_handle->swc_base + MBAR0_SWC_SIZE) \
230 asd_write_swc_##ord (asd_ha, reg, val); \
233 asd_move_swb(asd_ha, reg); \
234 asd_write_swb_##ord (asd_ha, reg, val); \
236 spin_unlock_irqrestore(&asd_ha->iolock, flags); \
250 val = asd_read_swa_byte (asd_ha, reg);
253 val = asd_read_swb_byte (asd_ha, reg);
256 val = asd_read_swc_byte (asd_ha, reg);
259 asd_move_swb(asd_ha, reg);
260 val = asd_read_swb_byte (asd_ha, reg);
265 #define ASD_READ_REG(type, ord) \
266 type asd_read_reg_##ord (struct asd_ha_struct *asd_ha, u32 reg) \
268 struct asd_ha_addrspace *io_handle=&asd_ha->io_handle[0]; \
270 unsigned long flags; \
271 BUG_ON(reg >= 0xC0000000 || reg < ALL_BASE_ADDR); \
272 spin_lock_irqsave(&asd_ha->iolock, flags); \
273 if (io_handle->swa_base <= reg \
274 && reg < io_handle->swa_base + MBAR0_SWA_SIZE) \
275 val = asd_read_swa_##ord (asd_ha, reg); \
276 else if (io_handle->swb_base <= reg \
277 && reg < io_handle->swb_base + MBAR0_SWB_SIZE) \
278 val = asd_read_swb_##ord (asd_ha, reg); \
279 else if (io_handle->swc_base <= reg \
280 && reg < io_handle->swc_base + MBAR0_SWC_SIZE) \
281 val = asd_read_swc_##ord (asd_ha, reg); \
284 asd_move_swb(asd_ha, reg); \
285 val = asd_read_swb_##ord (asd_ha, reg); \
287 spin_unlock_irqrestore(&asd_ha->iolock, flags); \
309 for ( ; count > 0; count--, offs++, p++)
310 *p = __asd_read_reg_byte(asd_ha, offs);
311 spin_unlock_irqrestore(&asd_ha->
iolock, flags);
328 for ( ; count > 0; count--, offs++, p++)
329 __asd_write_reg_byte(asd_ha, offs, *p);
330 spin_unlock_irqrestore(&asd_ha->
iolock, flags);