From: Albert H. <he...@us...> - 2005-09-25 19:56:00
|
Update of /cvsroot/gc-linux/linux/include/linux In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2087/include/linux Modified Files: exi.h Log Message: Added a interrupt-driven immediate (aka idi) transfer mode to the EXI layer. Added support for pluggable devices on memcard slots. Index: exi.h =================================================================== RCS file: /cvsroot/gc-linux/linux/include/linux/exi.h,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- exi.h 14 Sep 2005 19:24:19 -0000 1.12 +++ exi.h 25 Sep 2005 19:55:50 -0000 1.13 @@ -48,7 +48,8 @@ struct exi_device_id eid; int frequency; - unsigned long flags; + unsigned flags; +#define EXI_DEV_DYING (1<<0) struct device dev; }; @@ -95,6 +96,22 @@ dev_set_drvdata(&exi_dev->dev, data); } +static inline int exi_is_dying(struct exi_device *exi_device) +{ + return exi_device->flags & EXI_DEV_DYING; +} + +static inline int exi_set_dying(struct exi_device *exi_device, int status) +{ + if (status) + exi_device->flags |= EXI_DEV_DYING; + else + exi_device->flags &= ~EXI_DEV_DYING; + + return exi_is_dying(exi_device); +} + +extern u32 exi_get_id(struct exi_device *exi_device); /* * EXpansion Interface channels. @@ -140,10 +157,12 @@ #define EXI_OP_NOP -1 unsigned long flags; -#define EXI_NODMA (1<<0) +#define EXI_CMD_NODMA (1<<0) +#define EXI_CMD_IDI (1<<1) void *data; size_t len; + size_t bytes_left; dma_addr_t dma_addr; size_t dma_len; @@ -193,20 +212,6 @@ cmd->len = len; } -static inline void exi_op_read(struct exi_command *cmd, - struct exi_channel *exi_channel, - void *data, size_t len) -{ - exi_op_transfer(cmd, exi_channel, data, len, EXI_OP_READ); -} - -static inline void exi_op_write(struct exi_command *cmd, - struct exi_channel *exi_channel, - void *data, size_t len) -{ - exi_op_transfer(cmd, exi_channel, data, len, EXI_OP_WRITE); -} - /* * EXpansion Interface interfaces. @@ -234,35 +239,35 @@ * Standard. */ -extern u32 exi_get_id(struct exi_channel *exi_channel, - unsigned int device, unsigned int freq); - int exi_select(struct exi_device *exi_device); void exi_deselect(struct exi_channel *exi_channel); void exi_transfer(struct exi_channel *exi_channel, - void *data, size_t len, int opcode); + void *data, size_t len, int opcode, unsigned long flags); -#define exi_dev_select(d) exi_select(d) +static inline int exi_dev_select(struct exi_device *exi_device) +{ + return exi_select(exi_device); +} static inline void exi_dev_deselect(struct exi_device *exi_device) { - return exi_deselect(exi_device->exi_channel); + exi_deselect(exi_device->exi_channel); } static inline void exi_dev_transfer(struct exi_device *exi_device, - void *data, size_t len, int opcode) + void *data, size_t len, int opcode, unsigned long flags) { - return exi_transfer(exi_device->exi_channel, data, len, opcode); + exi_transfer(exi_device->exi_channel, data, len, opcode, flags); } static inline void exi_dev_read(struct exi_device *dev, void *data, size_t len) { - exi_dev_transfer(dev, data, len, EXI_OP_READ); + exi_dev_transfer(dev, data, len, EXI_OP_READ, 0); } static inline void exi_dev_write(struct exi_device *dev, void *data, size_t len) { - exi_dev_transfer(dev, data, len, EXI_OP_WRITE); + exi_dev_transfer(dev, data, len, EXI_OP_WRITE, 0); } static inline int exi_dev_set_freq(struct exi_device *dev, unsigned int freq) @@ -318,12 +323,12 @@ static inline void exi_lite_read(int channel, void *data, size_t len) { - exi_transfer(to_exi_channel(channel), data, len, EXI_OP_READ); + exi_transfer(to_exi_channel(channel), data, len, EXI_OP_READ, 0); } static inline void exi_lite_write(int channel, void *data, size_t len) { - exi_transfer(to_exi_channel(channel), data, len, EXI_OP_WRITE); + exi_transfer(to_exi_channel(channel), data, len, EXI_OP_WRITE, 0); } static inline int exi_lite_register_event(int channel, int event_id, |