forked from Minki/linux
[PATCH] pcmcia: remove dev_link_t and client_handle_t indirection
dev_link_t * and client_handle_t both mean struct pcmcai_device * by now. Therefore, remove all such indirections. Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
This commit is contained in:
parent
fd238232cd
commit
fba395eee7
@ -85,8 +85,8 @@ typedef struct bluecard_info_t {
|
||||
} bluecard_info_t;
|
||||
|
||||
|
||||
static void bluecard_config(dev_link_t *link);
|
||||
static void bluecard_release(dev_link_t *link);
|
||||
static void bluecard_config(struct pcmcia_device *link);
|
||||
static void bluecard_release(struct pcmcia_device *link);
|
||||
|
||||
static void bluecard_detach(struct pcmcia_device *p_dev);
|
||||
|
||||
@ -856,17 +856,16 @@ static int bluecard_close(bluecard_info_t *info)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bluecard_attach(struct pcmcia_device *p_dev)
|
||||
static int bluecard_attach(struct pcmcia_device *link)
|
||||
{
|
||||
bluecard_info_t *info;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
/* Create new info device */
|
||||
info = kzalloc(sizeof(*info), GFP_KERNEL);
|
||||
if (!info)
|
||||
return -ENOMEM;
|
||||
|
||||
info->p_dev = p_dev;
|
||||
info->p_dev = link;
|
||||
link->priv = info;
|
||||
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
|
||||
@ -887,9 +886,8 @@ static int bluecard_attach(struct pcmcia_device *p_dev)
|
||||
}
|
||||
|
||||
|
||||
static void bluecard_detach(struct pcmcia_device *p_dev)
|
||||
static void bluecard_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
bluecard_info_t *info = link->priv;
|
||||
|
||||
if (link->state & DEV_CONFIG)
|
||||
@ -899,7 +897,7 @@ static void bluecard_detach(struct pcmcia_device *p_dev)
|
||||
}
|
||||
|
||||
|
||||
static int first_tuple(client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
|
||||
static int first_tuple(struct pcmcia_device *handle, tuple_t *tuple, cisparse_t *parse)
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -914,9 +912,8 @@ static int first_tuple(client_handle_t handle, tuple_t *tuple, cisparse_t *parse
|
||||
return pcmcia_parse_tuple(handle, tuple, parse);
|
||||
}
|
||||
|
||||
static void bluecard_config(dev_link_t *link)
|
||||
static void bluecard_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
bluecard_info_t *info = link->priv;
|
||||
tuple_t tuple;
|
||||
u_short buf[256];
|
||||
@ -930,7 +927,7 @@ static void bluecard_config(dev_link_t *link)
|
||||
|
||||
/* Get configuration register information */
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
last_ret = first_tuple(handle, &tuple, &parse);
|
||||
last_ret = first_tuple(link, &tuple, &parse);
|
||||
if (last_ret != CS_SUCCESS) {
|
||||
last_fn = ParseTuple;
|
||||
goto cs_failed;
|
||||
@ -947,25 +944,25 @@ static void bluecard_config(dev_link_t *link)
|
||||
|
||||
for (n = 0; n < 0x400; n += 0x40) {
|
||||
link->io.BasePort1 = n ^ 0x300;
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS)
|
||||
break;
|
||||
}
|
||||
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestIO, i);
|
||||
cs_error(link, RequestIO, i);
|
||||
goto failed;
|
||||
}
|
||||
|
||||
i = pcmcia_request_irq(link->handle, &link->irq);
|
||||
i = pcmcia_request_irq(link, &link->irq);
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestIRQ, i);
|
||||
cs_error(link, RequestIRQ, i);
|
||||
link->irq.AssignedIRQ = 0;
|
||||
}
|
||||
|
||||
i = pcmcia_request_configuration(link->handle, &link->conf);
|
||||
i = pcmcia_request_configuration(link, &link->conf);
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestConfiguration, i);
|
||||
cs_error(link, RequestConfiguration, i);
|
||||
goto failed;
|
||||
}
|
||||
|
||||
@ -979,14 +976,14 @@ static void bluecard_config(dev_link_t *link)
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
|
||||
failed:
|
||||
bluecard_release(link);
|
||||
}
|
||||
|
||||
|
||||
static void bluecard_release(dev_link_t *link)
|
||||
static void bluecard_release(struct pcmcia_device *link)
|
||||
{
|
||||
bluecard_info_t *info = link->priv;
|
||||
|
||||
@ -995,7 +992,7 @@ static void bluecard_release(dev_link_t *link)
|
||||
|
||||
del_timer(&(info->timer));
|
||||
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
}
|
||||
|
||||
static struct pcmcia_device_id bluecard_ids[] = {
|
||||
|
@ -88,8 +88,8 @@ typedef struct bt3c_info_t {
|
||||
} bt3c_info_t;
|
||||
|
||||
|
||||
static void bt3c_config(dev_link_t *link);
|
||||
static void bt3c_release(dev_link_t *link);
|
||||
static void bt3c_config(struct pcmcia_device *link);
|
||||
static void bt3c_release(struct pcmcia_device *link);
|
||||
|
||||
static void bt3c_detach(struct pcmcia_device *p_dev);
|
||||
|
||||
@ -645,17 +645,16 @@ static int bt3c_close(bt3c_info_t *info)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bt3c_attach(struct pcmcia_device *p_dev)
|
||||
static int bt3c_attach(struct pcmcia_device *link)
|
||||
{
|
||||
bt3c_info_t *info;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
/* Create new info device */
|
||||
info = kzalloc(sizeof(*info), GFP_KERNEL);
|
||||
if (!info)
|
||||
return -ENOMEM;
|
||||
|
||||
info->p_dev = p_dev;
|
||||
info->p_dev = link;
|
||||
link->priv = info;
|
||||
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
|
||||
@ -676,9 +675,8 @@ static int bt3c_attach(struct pcmcia_device *p_dev)
|
||||
}
|
||||
|
||||
|
||||
static void bt3c_detach(struct pcmcia_device *p_dev)
|
||||
static void bt3c_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
bt3c_info_t *info = link->priv;
|
||||
|
||||
if (link->state & DEV_CONFIG)
|
||||
@ -687,7 +685,7 @@ static void bt3c_detach(struct pcmcia_device *p_dev)
|
||||
kfree(info);
|
||||
}
|
||||
|
||||
static int get_tuple(client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
|
||||
static int get_tuple(struct pcmcia_device *handle, tuple_t *tuple, cisparse_t *parse)
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -698,24 +696,23 @@ static int get_tuple(client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
|
||||
return pcmcia_parse_tuple(handle, tuple, parse);
|
||||
}
|
||||
|
||||
static int first_tuple(client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
|
||||
static int first_tuple(struct pcmcia_device *handle, tuple_t *tuple, cisparse_t *parse)
|
||||
{
|
||||
if (pcmcia_get_first_tuple(handle, tuple) != CS_SUCCESS)
|
||||
return CS_NO_MORE_ITEMS;
|
||||
return get_tuple(handle, tuple, parse);
|
||||
}
|
||||
|
||||
static int next_tuple(client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
|
||||
static int next_tuple(struct pcmcia_device *handle, tuple_t *tuple, cisparse_t *parse)
|
||||
{
|
||||
if (pcmcia_get_next_tuple(handle, tuple) != CS_SUCCESS)
|
||||
return CS_NO_MORE_ITEMS;
|
||||
return get_tuple(handle, tuple, parse);
|
||||
}
|
||||
|
||||
static void bt3c_config(dev_link_t *link)
|
||||
static void bt3c_config(struct pcmcia_device *link)
|
||||
{
|
||||
static kio_addr_t base[5] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8, 0x0 };
|
||||
client_handle_t handle = link->handle;
|
||||
bt3c_info_t *info = link->priv;
|
||||
tuple_t tuple;
|
||||
u_short buf[256];
|
||||
@ -730,7 +727,7 @@ static void bt3c_config(dev_link_t *link)
|
||||
|
||||
/* Get configuration register information */
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
last_ret = first_tuple(handle, &tuple, &parse);
|
||||
last_ret = first_tuple(link, &tuple, &parse);
|
||||
if (last_ret != CS_SUCCESS) {
|
||||
last_fn = ParseTuple;
|
||||
goto cs_failed;
|
||||
@ -749,7 +746,7 @@ static void bt3c_config(dev_link_t *link)
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
/* Two tries: without IO aliases, then with aliases */
|
||||
for (try = 0; try < 2; try++) {
|
||||
i = first_tuple(handle, &tuple, &parse);
|
||||
i = first_tuple(link, &tuple, &parse);
|
||||
while (i != CS_NO_MORE_ITEMS) {
|
||||
if (i != CS_SUCCESS)
|
||||
goto next_entry;
|
||||
@ -759,49 +756,49 @@ static void bt3c_config(dev_link_t *link)
|
||||
link->conf.ConfigIndex = cf->index;
|
||||
link->io.BasePort1 = cf->io.win[0].base;
|
||||
link->io.IOAddrLines = (try == 0) ? 16 : cf->io.flags & CISTPL_IO_LINES_MASK;
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS)
|
||||
goto found_port;
|
||||
}
|
||||
next_entry:
|
||||
i = next_tuple(handle, &tuple, &parse);
|
||||
i = next_tuple(link, &tuple, &parse);
|
||||
}
|
||||
}
|
||||
|
||||
/* Second pass: try to find an entry that isn't picky about
|
||||
its base address, then try to grab any standard serial port
|
||||
address, and finally try to get any free port. */
|
||||
i = first_tuple(handle, &tuple, &parse);
|
||||
i = first_tuple(link, &tuple, &parse);
|
||||
while (i != CS_NO_MORE_ITEMS) {
|
||||
if ((i == CS_SUCCESS) && (cf->io.nwin > 0) && ((cf->io.flags & CISTPL_IO_LINES_MASK) <= 3)) {
|
||||
link->conf.ConfigIndex = cf->index;
|
||||
for (j = 0; j < 5; j++) {
|
||||
link->io.BasePort1 = base[j];
|
||||
link->io.IOAddrLines = base[j] ? 16 : 3;
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS)
|
||||
goto found_port;
|
||||
}
|
||||
}
|
||||
i = next_tuple(handle, &tuple, &parse);
|
||||
i = next_tuple(link, &tuple, &parse);
|
||||
}
|
||||
|
||||
found_port:
|
||||
if (i != CS_SUCCESS) {
|
||||
BT_ERR("No usable port range found");
|
||||
cs_error(link->handle, RequestIO, i);
|
||||
cs_error(link, RequestIO, i);
|
||||
goto failed;
|
||||
}
|
||||
|
||||
i = pcmcia_request_irq(link->handle, &link->irq);
|
||||
i = pcmcia_request_irq(link, &link->irq);
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestIRQ, i);
|
||||
cs_error(link, RequestIRQ, i);
|
||||
link->irq.AssignedIRQ = 0;
|
||||
}
|
||||
|
||||
i = pcmcia_request_configuration(link->handle, &link->conf);
|
||||
i = pcmcia_request_configuration(link, &link->conf);
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestConfiguration, i);
|
||||
cs_error(link, RequestConfiguration, i);
|
||||
goto failed;
|
||||
}
|
||||
|
||||
@ -815,21 +812,21 @@ found_port:
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
|
||||
failed:
|
||||
bt3c_release(link);
|
||||
}
|
||||
|
||||
|
||||
static void bt3c_release(dev_link_t *link)
|
||||
static void bt3c_release(struct pcmcia_device *link)
|
||||
{
|
||||
bt3c_info_t *info = link->priv;
|
||||
|
||||
if (link->state & DEV_PRESENT)
|
||||
bt3c_close(info);
|
||||
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
}
|
||||
|
||||
|
||||
|
@ -84,8 +84,8 @@ typedef struct btuart_info_t {
|
||||
} btuart_info_t;
|
||||
|
||||
|
||||
static void btuart_config(dev_link_t *link);
|
||||
static void btuart_release(dev_link_t *link);
|
||||
static void btuart_config(struct pcmcia_device *link);
|
||||
static void btuart_release(struct pcmcia_device *link);
|
||||
|
||||
static void btuart_detach(struct pcmcia_device *p_dev);
|
||||
|
||||
@ -576,17 +576,16 @@ static int btuart_close(btuart_info_t *info)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int btuart_attach(struct pcmcia_device *p_dev)
|
||||
static int btuart_attach(struct pcmcia_device *link)
|
||||
{
|
||||
btuart_info_t *info;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
/* Create new info device */
|
||||
info = kzalloc(sizeof(*info), GFP_KERNEL);
|
||||
if (!info)
|
||||
return -ENOMEM;
|
||||
|
||||
info->p_dev = p_dev;
|
||||
info->p_dev = link;
|
||||
link->priv = info;
|
||||
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
|
||||
@ -607,9 +606,8 @@ static int btuart_attach(struct pcmcia_device *p_dev)
|
||||
}
|
||||
|
||||
|
||||
static void btuart_detach(struct pcmcia_device *p_dev)
|
||||
static void btuart_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
btuart_info_t *info = link->priv;
|
||||
|
||||
if (link->state & DEV_CONFIG)
|
||||
@ -618,7 +616,7 @@ static void btuart_detach(struct pcmcia_device *p_dev)
|
||||
kfree(info);
|
||||
}
|
||||
|
||||
static int get_tuple(client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
|
||||
static int get_tuple(struct pcmcia_device *handle, tuple_t *tuple, cisparse_t *parse)
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -629,24 +627,23 @@ static int get_tuple(client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
|
||||
return pcmcia_parse_tuple(handle, tuple, parse);
|
||||
}
|
||||
|
||||
static int first_tuple(client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
|
||||
static int first_tuple(struct pcmcia_device *handle, tuple_t *tuple, cisparse_t *parse)
|
||||
{
|
||||
if (pcmcia_get_first_tuple(handle, tuple) != CS_SUCCESS)
|
||||
return CS_NO_MORE_ITEMS;
|
||||
return get_tuple(handle, tuple, parse);
|
||||
}
|
||||
|
||||
static int next_tuple(client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
|
||||
static int next_tuple(struct pcmcia_device *handle, tuple_t *tuple, cisparse_t *parse)
|
||||
{
|
||||
if (pcmcia_get_next_tuple(handle, tuple) != CS_SUCCESS)
|
||||
return CS_NO_MORE_ITEMS;
|
||||
return get_tuple(handle, tuple, parse);
|
||||
}
|
||||
|
||||
static void btuart_config(dev_link_t *link)
|
||||
static void btuart_config(struct pcmcia_device *link)
|
||||
{
|
||||
static kio_addr_t base[5] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8, 0x0 };
|
||||
client_handle_t handle = link->handle;
|
||||
btuart_info_t *info = link->priv;
|
||||
tuple_t tuple;
|
||||
u_short buf[256];
|
||||
@ -661,7 +658,7 @@ static void btuart_config(dev_link_t *link)
|
||||
|
||||
/* Get configuration register information */
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
last_ret = first_tuple(handle, &tuple, &parse);
|
||||
last_ret = first_tuple(link, &tuple, &parse);
|
||||
if (last_ret != CS_SUCCESS) {
|
||||
last_fn = ParseTuple;
|
||||
goto cs_failed;
|
||||
@ -680,7 +677,7 @@ static void btuart_config(dev_link_t *link)
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
/* Two tries: without IO aliases, then with aliases */
|
||||
for (try = 0; try < 2; try++) {
|
||||
i = first_tuple(handle, &tuple, &parse);
|
||||
i = first_tuple(link, &tuple, &parse);
|
||||
while (i != CS_NO_MORE_ITEMS) {
|
||||
if (i != CS_SUCCESS)
|
||||
goto next_entry;
|
||||
@ -690,19 +687,19 @@ static void btuart_config(dev_link_t *link)
|
||||
link->conf.ConfigIndex = cf->index;
|
||||
link->io.BasePort1 = cf->io.win[0].base;
|
||||
link->io.IOAddrLines = (try == 0) ? 16 : cf->io.flags & CISTPL_IO_LINES_MASK;
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS)
|
||||
goto found_port;
|
||||
}
|
||||
next_entry:
|
||||
i = next_tuple(handle, &tuple, &parse);
|
||||
i = next_tuple(link, &tuple, &parse);
|
||||
}
|
||||
}
|
||||
|
||||
/* Second pass: try to find an entry that isn't picky about
|
||||
its base address, then try to grab any standard serial port
|
||||
address, and finally try to get any free port. */
|
||||
i = first_tuple(handle, &tuple, &parse);
|
||||
i = first_tuple(link, &tuple, &parse);
|
||||
while (i != CS_NO_MORE_ITEMS) {
|
||||
if ((i == CS_SUCCESS) && (cf->io.nwin > 0)
|
||||
&& ((cf->io.flags & CISTPL_IO_LINES_MASK) <= 3)) {
|
||||
@ -710,30 +707,30 @@ next_entry:
|
||||
for (j = 0; j < 5; j++) {
|
||||
link->io.BasePort1 = base[j];
|
||||
link->io.IOAddrLines = base[j] ? 16 : 3;
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS)
|
||||
goto found_port;
|
||||
}
|
||||
}
|
||||
i = next_tuple(handle, &tuple, &parse);
|
||||
i = next_tuple(link, &tuple, &parse);
|
||||
}
|
||||
|
||||
found_port:
|
||||
if (i != CS_SUCCESS) {
|
||||
BT_ERR("No usable port range found");
|
||||
cs_error(link->handle, RequestIO, i);
|
||||
cs_error(link, RequestIO, i);
|
||||
goto failed;
|
||||
}
|
||||
|
||||
i = pcmcia_request_irq(link->handle, &link->irq);
|
||||
i = pcmcia_request_irq(link, &link->irq);
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestIRQ, i);
|
||||
cs_error(link, RequestIRQ, i);
|
||||
link->irq.AssignedIRQ = 0;
|
||||
}
|
||||
|
||||
i = pcmcia_request_configuration(link->handle, &link->conf);
|
||||
i = pcmcia_request_configuration(link, &link->conf);
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestConfiguration, i);
|
||||
cs_error(link, RequestConfiguration, i);
|
||||
goto failed;
|
||||
}
|
||||
|
||||
@ -747,21 +744,21 @@ found_port:
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
|
||||
failed:
|
||||
btuart_release(link);
|
||||
}
|
||||
|
||||
|
||||
static void btuart_release(dev_link_t *link)
|
||||
static void btuart_release(struct pcmcia_device *link)
|
||||
{
|
||||
btuart_info_t *info = link->priv;
|
||||
|
||||
if (link->state & DEV_PRESENT)
|
||||
btuart_close(info);
|
||||
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
}
|
||||
|
||||
static struct pcmcia_device_id btuart_ids[] = {
|
||||
|
@ -87,8 +87,8 @@ typedef struct dtl1_info_t {
|
||||
} dtl1_info_t;
|
||||
|
||||
|
||||
static void dtl1_config(dev_link_t *link);
|
||||
static void dtl1_release(dev_link_t *link);
|
||||
static void dtl1_config(struct pcmcia_device *link);
|
||||
static void dtl1_release(struct pcmcia_device *link);
|
||||
|
||||
static void dtl1_detach(struct pcmcia_device *p_dev);
|
||||
|
||||
@ -555,17 +555,16 @@ static int dtl1_close(dtl1_info_t *info)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int dtl1_attach(struct pcmcia_device *p_dev)
|
||||
static int dtl1_attach(struct pcmcia_device *link)
|
||||
{
|
||||
dtl1_info_t *info;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
/* Create new info device */
|
||||
info = kzalloc(sizeof(*info), GFP_KERNEL);
|
||||
if (!info)
|
||||
return -ENOMEM;
|
||||
|
||||
info->p_dev = p_dev;
|
||||
info->p_dev = link;
|
||||
link->priv = info;
|
||||
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
|
||||
@ -586,9 +585,8 @@ static int dtl1_attach(struct pcmcia_device *p_dev)
|
||||
}
|
||||
|
||||
|
||||
static void dtl1_detach(struct pcmcia_device *p_dev)
|
||||
static void dtl1_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
dtl1_info_t *info = link->priv;
|
||||
|
||||
if (link->state & DEV_CONFIG)
|
||||
@ -597,7 +595,7 @@ static void dtl1_detach(struct pcmcia_device *p_dev)
|
||||
kfree(info);
|
||||
}
|
||||
|
||||
static int get_tuple(client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
|
||||
static int get_tuple(struct pcmcia_device *handle, tuple_t *tuple, cisparse_t *parse)
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -608,23 +606,22 @@ static int get_tuple(client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
|
||||
return pcmcia_parse_tuple(handle, tuple, parse);
|
||||
}
|
||||
|
||||
static int first_tuple(client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
|
||||
static int first_tuple(struct pcmcia_device *handle, tuple_t *tuple, cisparse_t *parse)
|
||||
{
|
||||
if (pcmcia_get_first_tuple(handle, tuple) != CS_SUCCESS)
|
||||
return CS_NO_MORE_ITEMS;
|
||||
return get_tuple(handle, tuple, parse);
|
||||
}
|
||||
|
||||
static int next_tuple(client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
|
||||
static int next_tuple(struct pcmcia_device *handle, tuple_t *tuple, cisparse_t *parse)
|
||||
{
|
||||
if (pcmcia_get_next_tuple(handle, tuple) != CS_SUCCESS)
|
||||
return CS_NO_MORE_ITEMS;
|
||||
return get_tuple(handle, tuple, parse);
|
||||
}
|
||||
|
||||
static void dtl1_config(dev_link_t *link)
|
||||
static void dtl1_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
dtl1_info_t *info = link->priv;
|
||||
tuple_t tuple;
|
||||
u_short buf[256];
|
||||
@ -639,7 +636,7 @@ static void dtl1_config(dev_link_t *link)
|
||||
|
||||
/* Get configuration register information */
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
last_ret = first_tuple(handle, &tuple, &parse);
|
||||
last_ret = first_tuple(link, &tuple, &parse);
|
||||
if (last_ret != CS_SUCCESS) {
|
||||
last_fn = ParseTuple;
|
||||
goto cs_failed;
|
||||
@ -658,34 +655,34 @@ static void dtl1_config(dev_link_t *link)
|
||||
|
||||
/* Look for a generic full-sized window */
|
||||
link->io.NumPorts1 = 8;
|
||||
i = first_tuple(handle, &tuple, &parse);
|
||||
i = first_tuple(link, &tuple, &parse);
|
||||
while (i != CS_NO_MORE_ITEMS) {
|
||||
if ((i == CS_SUCCESS) && (cf->io.nwin == 1) && (cf->io.win[0].len > 8)) {
|
||||
link->conf.ConfigIndex = cf->index;
|
||||
link->io.BasePort1 = cf->io.win[0].base;
|
||||
link->io.NumPorts1 = cf->io.win[0].len; /*yo */
|
||||
link->io.IOAddrLines = cf->io.flags & CISTPL_IO_LINES_MASK;
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS)
|
||||
break;
|
||||
}
|
||||
i = next_tuple(handle, &tuple, &parse);
|
||||
i = next_tuple(link, &tuple, &parse);
|
||||
}
|
||||
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestIO, i);
|
||||
cs_error(link, RequestIO, i);
|
||||
goto failed;
|
||||
}
|
||||
|
||||
i = pcmcia_request_irq(link->handle, &link->irq);
|
||||
i = pcmcia_request_irq(link, &link->irq);
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestIRQ, i);
|
||||
cs_error(link, RequestIRQ, i);
|
||||
link->irq.AssignedIRQ = 0;
|
||||
}
|
||||
|
||||
i = pcmcia_request_configuration(link->handle, &link->conf);
|
||||
i = pcmcia_request_configuration(link, &link->conf);
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestConfiguration, i);
|
||||
cs_error(link, RequestConfiguration, i);
|
||||
goto failed;
|
||||
}
|
||||
|
||||
@ -699,21 +696,21 @@ static void dtl1_config(dev_link_t *link)
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
|
||||
failed:
|
||||
dtl1_release(link);
|
||||
}
|
||||
|
||||
|
||||
static void dtl1_release(dev_link_t *link)
|
||||
static void dtl1_release(struct pcmcia_device *link)
|
||||
{
|
||||
dtl1_info_t *info = link->priv;
|
||||
|
||||
if (link->state & DEV_PRESENT)
|
||||
dtl1_close(info);
|
||||
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
}
|
||||
|
||||
|
||||
|
@ -67,7 +67,7 @@ static char *version = "cm4000_cs.c v2.4.0gm6 - All bugs added by Harald Welte";
|
||||
#define T_100MSEC msecs_to_jiffies(100)
|
||||
#define T_500MSEC msecs_to_jiffies(500)
|
||||
|
||||
static void cm4000_release(dev_link_t *link);
|
||||
static void cm4000_release(struct pcmcia_device *link);
|
||||
|
||||
static int major; /* major number we get from the kernel */
|
||||
|
||||
@ -149,14 +149,14 @@ struct cm4000_dev {
|
||||
#define ZERO_DEV(dev) \
|
||||
memset(&dev->atr_csum,0, \
|
||||
sizeof(struct cm4000_dev) - \
|
||||
/*link*/ sizeof(dev_link_t) - \
|
||||
/*link*/ sizeof(struct pcmcia_device) - \
|
||||
/*node*/ sizeof(dev_node_t) - \
|
||||
/*atr*/ MAX_ATR*sizeof(char) - \
|
||||
/*rbuf*/ 512*sizeof(char) - \
|
||||
/*sbuf*/ 512*sizeof(char) - \
|
||||
/*queue*/ 4*sizeof(wait_queue_head_t))
|
||||
|
||||
static dev_link_t *dev_table[CM4000_MAX_DEV];
|
||||
static struct pcmcia_device *dev_table[CM4000_MAX_DEV];
|
||||
static struct class *cmm_class;
|
||||
|
||||
/* This table doesn't use spaces after the comma between fields and thus
|
||||
@ -1441,7 +1441,7 @@ static int cmm_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
|
||||
{
|
||||
struct cm4000_dev *dev = filp->private_data;
|
||||
ioaddr_t iobase = dev->p_dev->io.BasePort1;
|
||||
dev_link_t *link;
|
||||
struct pcmcia_device *link;
|
||||
int size;
|
||||
int rc;
|
||||
void __user *argp = (void __user *)arg;
|
||||
@ -1660,7 +1660,7 @@ static int cmm_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
|
||||
static int cmm_open(struct inode *inode, struct file *filp)
|
||||
{
|
||||
struct cm4000_dev *dev;
|
||||
dev_link_t *link;
|
||||
struct pcmcia_device *link;
|
||||
int rc, minor = iminor(inode);
|
||||
|
||||
if (minor >= CM4000_MAX_DEV)
|
||||
@ -1709,7 +1709,7 @@ static int cmm_open(struct inode *inode, struct file *filp)
|
||||
static int cmm_close(struct inode *inode, struct file *filp)
|
||||
{
|
||||
struct cm4000_dev *dev;
|
||||
dev_link_t *link;
|
||||
struct pcmcia_device *link;
|
||||
int minor = iminor(inode);
|
||||
|
||||
if (minor >= CM4000_MAX_DEV)
|
||||
@ -1735,7 +1735,7 @@ static int cmm_close(struct inode *inode, struct file *filp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void cmm_cm4000_release(dev_link_t * link)
|
||||
static void cmm_cm4000_release(struct pcmcia_device * link)
|
||||
{
|
||||
struct cm4000_dev *dev = link->priv;
|
||||
|
||||
@ -1759,9 +1759,8 @@ static void cmm_cm4000_release(dev_link_t * link)
|
||||
|
||||
/*==== Interface to PCMCIA Layer =======================================*/
|
||||
|
||||
static void cm4000_config(dev_link_t * link, int devno)
|
||||
static void cm4000_config(struct pcmcia_device * link, int devno)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
struct cm4000_dev *dev;
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
@ -1776,16 +1775,16 @@ static void cm4000_config(dev_link_t * link, int devno)
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
|
||||
if ((fail_rc = pcmcia_get_first_tuple(handle, &tuple)) != CS_SUCCESS) {
|
||||
if ((fail_rc = pcmcia_get_first_tuple(link, &tuple)) != CS_SUCCESS) {
|
||||
fail_fn = GetFirstTuple;
|
||||
goto cs_failed;
|
||||
}
|
||||
if ((fail_rc = pcmcia_get_tuple_data(handle, &tuple)) != CS_SUCCESS) {
|
||||
if ((fail_rc = pcmcia_get_tuple_data(link, &tuple)) != CS_SUCCESS) {
|
||||
fail_fn = GetTupleData;
|
||||
goto cs_failed;
|
||||
}
|
||||
if ((fail_rc =
|
||||
pcmcia_parse_tuple(handle, &tuple, &parse)) != CS_SUCCESS) {
|
||||
pcmcia_parse_tuple(link, &tuple, &parse)) != CS_SUCCESS) {
|
||||
fail_fn = ParseTuple;
|
||||
goto cs_failed;
|
||||
}
|
||||
@ -1798,13 +1797,13 @@ static void cm4000_config(dev_link_t * link, int devno)
|
||||
link->io.NumPorts2 = 0;
|
||||
link->io.Attributes2 = 0;
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
for (rc = pcmcia_get_first_tuple(handle, &tuple);
|
||||
rc == CS_SUCCESS; rc = pcmcia_get_next_tuple(handle, &tuple)) {
|
||||
for (rc = pcmcia_get_first_tuple(link, &tuple);
|
||||
rc == CS_SUCCESS; rc = pcmcia_get_next_tuple(link, &tuple)) {
|
||||
|
||||
rc = pcmcia_get_tuple_data(handle, &tuple);
|
||||
rc = pcmcia_get_tuple_data(link, &tuple);
|
||||
if (rc != CS_SUCCESS)
|
||||
continue;
|
||||
rc = pcmcia_parse_tuple(handle, &tuple, &parse);
|
||||
rc = pcmcia_parse_tuple(link, &tuple, &parse);
|
||||
if (rc != CS_SUCCESS)
|
||||
continue;
|
||||
|
||||
@ -1824,7 +1823,7 @@ static void cm4000_config(dev_link_t * link, int devno)
|
||||
link->io.IOAddrLines = parse.cftable_entry.io.flags
|
||||
& CISTPL_IO_LINES_MASK;
|
||||
|
||||
rc = pcmcia_request_io(handle, &link->io);
|
||||
rc = pcmcia_request_io(link, &link->io);
|
||||
if (rc == CS_SUCCESS)
|
||||
break; /* we are done */
|
||||
}
|
||||
@ -1834,7 +1833,7 @@ static void cm4000_config(dev_link_t * link, int devno)
|
||||
link->conf.IntType = 00000002;
|
||||
|
||||
if ((fail_rc =
|
||||
pcmcia_request_configuration(handle, &link->conf)) != CS_SUCCESS) {
|
||||
pcmcia_request_configuration(link, &link->conf)) != CS_SUCCESS) {
|
||||
fail_fn = RequestConfiguration;
|
||||
goto cs_release;
|
||||
}
|
||||
@ -1850,16 +1849,15 @@ static void cm4000_config(dev_link_t * link, int devno)
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(handle, fail_fn, fail_rc);
|
||||
cs_error(link, fail_fn, fail_rc);
|
||||
cs_release:
|
||||
cm4000_release(link);
|
||||
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
}
|
||||
|
||||
static int cm4000_suspend(struct pcmcia_device *p_dev)
|
||||
static int cm4000_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct cm4000_dev *dev;
|
||||
|
||||
dev = link->priv;
|
||||
@ -1868,9 +1866,8 @@ static int cm4000_suspend(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cm4000_resume(struct pcmcia_device *p_dev)
|
||||
static int cm4000_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct cm4000_dev *dev;
|
||||
|
||||
dev = link->priv;
|
||||
@ -1880,17 +1877,16 @@ static int cm4000_resume(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void cm4000_release(dev_link_t *link)
|
||||
static void cm4000_release(struct pcmcia_device *link)
|
||||
{
|
||||
cmm_cm4000_release(link->priv); /* delay release until device closed */
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
}
|
||||
|
||||
static int cm4000_attach(struct pcmcia_device *p_dev)
|
||||
static int cm4000_attach(struct pcmcia_device *link)
|
||||
{
|
||||
struct cm4000_dev *dev;
|
||||
int i;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
for (i = 0; i < CM4000_MAX_DEV; i++)
|
||||
if (dev_table[i] == NULL)
|
||||
@ -1906,7 +1902,7 @@ static int cm4000_attach(struct pcmcia_device *p_dev)
|
||||
if (dev == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
dev->p_dev = p_dev;
|
||||
dev->p_dev = link;
|
||||
link->priv = dev;
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
dev_table[i] = link;
|
||||
@ -1925,9 +1921,8 @@ static int cm4000_attach(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void cm4000_detach(struct pcmcia_device *p_dev)
|
||||
static void cm4000_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct cm4000_dev *dev = link->priv;
|
||||
int devno;
|
||||
|
||||
|
@ -65,7 +65,7 @@ static char *version =
|
||||
/* how often to poll for fifo status change */
|
||||
#define POLL_PERIOD msecs_to_jiffies(10)
|
||||
|
||||
static void reader_release(dev_link_t *link);
|
||||
static void reader_release(struct pcmcia_device *link);
|
||||
|
||||
static int major;
|
||||
static struct class *cmx_class;
|
||||
@ -87,7 +87,7 @@ struct reader_dev {
|
||||
struct timer_list poll_timer;
|
||||
};
|
||||
|
||||
static dev_link_t *dev_table[CM_MAX_DEV];
|
||||
static struct pcmcia_device *dev_table[CM_MAX_DEV];
|
||||
|
||||
#ifndef PCMCIA_DEBUG
|
||||
#define xoutb outb
|
||||
@ -445,7 +445,7 @@ static unsigned int cm4040_poll(struct file *filp, poll_table *wait)
|
||||
static int cm4040_open(struct inode *inode, struct file *filp)
|
||||
{
|
||||
struct reader_dev *dev;
|
||||
dev_link_t *link;
|
||||
struct pcmcia_device *link;
|
||||
int minor = iminor(inode);
|
||||
|
||||
if (minor >= CM_MAX_DEV)
|
||||
@ -478,7 +478,7 @@ static int cm4040_open(struct inode *inode, struct file *filp)
|
||||
static int cm4040_close(struct inode *inode, struct file *filp)
|
||||
{
|
||||
struct reader_dev *dev = filp->private_data;
|
||||
dev_link_t *link;
|
||||
struct pcmcia_device *link;
|
||||
int minor = iminor(inode);
|
||||
|
||||
DEBUGP(2, dev, "-> cm4040_close(maj/min=%d.%d)\n", imajor(inode),
|
||||
@ -500,7 +500,7 @@ static int cm4040_close(struct inode *inode, struct file *filp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void cm4040_reader_release(dev_link_t *link)
|
||||
static void cm4040_reader_release(struct pcmcia_device *link)
|
||||
{
|
||||
struct reader_dev *dev = link->priv;
|
||||
|
||||
@ -514,9 +514,8 @@ static void cm4040_reader_release(dev_link_t *link)
|
||||
return;
|
||||
}
|
||||
|
||||
static void reader_config(dev_link_t *link, int devno)
|
||||
static void reader_config(struct pcmcia_device *link, int devno)
|
||||
{
|
||||
client_handle_t handle;
|
||||
struct reader_dev *dev;
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
@ -524,23 +523,21 @@ static void reader_config(dev_link_t *link, int devno)
|
||||
int fail_fn, fail_rc;
|
||||
int rc;
|
||||
|
||||
handle = link->handle;
|
||||
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
tuple.Attributes = 0;
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
|
||||
if ((fail_rc = pcmcia_get_first_tuple(handle, &tuple)) != CS_SUCCESS) {
|
||||
if ((fail_rc = pcmcia_get_first_tuple(link, &tuple)) != CS_SUCCESS) {
|
||||
fail_fn = GetFirstTuple;
|
||||
goto cs_failed;
|
||||
}
|
||||
if ((fail_rc = pcmcia_get_tuple_data(handle, &tuple)) != CS_SUCCESS) {
|
||||
if ((fail_rc = pcmcia_get_tuple_data(link, &tuple)) != CS_SUCCESS) {
|
||||
fail_fn = GetTupleData;
|
||||
goto cs_failed;
|
||||
}
|
||||
if ((fail_rc = pcmcia_parse_tuple(handle, &tuple, &parse))
|
||||
if ((fail_rc = pcmcia_parse_tuple(link, &tuple, &parse))
|
||||
!= CS_SUCCESS) {
|
||||
fail_fn = ParseTuple;
|
||||
goto cs_failed;
|
||||
@ -554,13 +551,13 @@ static void reader_config(dev_link_t *link, int devno)
|
||||
link->io.NumPorts2 = 0;
|
||||
link->io.Attributes2 = 0;
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
for (rc = pcmcia_get_first_tuple(handle, &tuple);
|
||||
for (rc = pcmcia_get_first_tuple(link, &tuple);
|
||||
rc == CS_SUCCESS;
|
||||
rc = pcmcia_get_next_tuple(handle, &tuple)) {
|
||||
rc = pcmcia_get_tuple_data(handle, &tuple);
|
||||
rc = pcmcia_get_next_tuple(link, &tuple)) {
|
||||
rc = pcmcia_get_tuple_data(link, &tuple);
|
||||
if (rc != CS_SUCCESS)
|
||||
continue;
|
||||
rc = pcmcia_parse_tuple(handle, &tuple, &parse);
|
||||
rc = pcmcia_parse_tuple(link, &tuple, &parse);
|
||||
if (rc != CS_SUCCESS)
|
||||
continue;
|
||||
|
||||
@ -578,13 +575,13 @@ static void reader_config(dev_link_t *link, int devno)
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
|
||||
link->io.IOAddrLines = parse.cftable_entry.io.flags
|
||||
& CISTPL_IO_LINES_MASK;
|
||||
rc = pcmcia_request_io(handle, &link->io);
|
||||
rc = pcmcia_request_io(link, &link->io);
|
||||
|
||||
dev_printk(KERN_INFO, &handle_to_dev(handle), "foo");
|
||||
dev_printk(KERN_INFO, &handle_to_dev(link), "foo");
|
||||
if (rc == CS_SUCCESS)
|
||||
break;
|
||||
else
|
||||
dev_printk(KERN_INFO, &handle_to_dev(handle),
|
||||
dev_printk(KERN_INFO, &handle_to_dev(link),
|
||||
"pcmcia_request_io failed 0x%x\n", rc);
|
||||
}
|
||||
if (rc != CS_SUCCESS)
|
||||
@ -592,10 +589,10 @@ static void reader_config(dev_link_t *link, int devno)
|
||||
|
||||
link->conf.IntType = 00000002;
|
||||
|
||||
if ((fail_rc = pcmcia_request_configuration(handle,&link->conf))
|
||||
if ((fail_rc = pcmcia_request_configuration(link,&link->conf))
|
||||
!=CS_SUCCESS) {
|
||||
fail_fn = RequestConfiguration;
|
||||
dev_printk(KERN_INFO, &handle_to_dev(handle),
|
||||
dev_printk(KERN_INFO, &handle_to_dev(link),
|
||||
"pcmcia_request_configuration failed 0x%x\n",
|
||||
fail_rc);
|
||||
goto cs_release;
|
||||
@ -616,23 +613,22 @@ static void reader_config(dev_link_t *link, int devno)
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(handle, fail_fn, fail_rc);
|
||||
cs_error(link, fail_fn, fail_rc);
|
||||
cs_release:
|
||||
reader_release(link);
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
}
|
||||
|
||||
static void reader_release(dev_link_t *link)
|
||||
static void reader_release(struct pcmcia_device *link)
|
||||
{
|
||||
cm4040_reader_release(link->priv);
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
}
|
||||
|
||||
static int reader_attach(struct pcmcia_device *p_dev)
|
||||
static int reader_attach(struct pcmcia_device *link)
|
||||
{
|
||||
struct reader_dev *dev;
|
||||
int i;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
for (i = 0; i < CM_MAX_DEV; i++) {
|
||||
if (dev_table[i] == NULL)
|
||||
@ -650,7 +646,7 @@ static int reader_attach(struct pcmcia_device *p_dev)
|
||||
dev->buffer_status = 0;
|
||||
|
||||
link->priv = dev;
|
||||
dev->p_dev = p_dev;
|
||||
dev->p_dev = link;
|
||||
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
dev_table[i] = link;
|
||||
@ -671,9 +667,8 @@ static int reader_attach(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void reader_detach(struct pcmcia_device *p_dev)
|
||||
static void reader_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct reader_dev *dev = link->priv;
|
||||
int devno;
|
||||
|
||||
|
@ -484,7 +484,7 @@ static void mgslpc_wait_until_sent(struct tty_struct *tty, int timeout);
|
||||
|
||||
/* PCMCIA prototypes */
|
||||
|
||||
static void mgslpc_config(dev_link_t *link);
|
||||
static void mgslpc_config(struct pcmcia_device *link);
|
||||
static void mgslpc_release(u_long arg);
|
||||
static void mgslpc_detach(struct pcmcia_device *p_dev);
|
||||
|
||||
@ -533,10 +533,9 @@ static void ldisc_receive_buf(struct tty_struct *tty,
|
||||
}
|
||||
}
|
||||
|
||||
static int mgslpc_attach(struct pcmcia_device *p_dev)
|
||||
static int mgslpc_attach(struct pcmcia_device *link)
|
||||
{
|
||||
MGSLPC_INFO *info;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
if (debug_level >= DEBUG_LEVEL_INFO)
|
||||
printk("mgslpc_attach\n");
|
||||
@ -565,10 +564,10 @@ static int mgslpc_attach(struct pcmcia_device *p_dev)
|
||||
info->imrb_value = 0xffff;
|
||||
info->pim_value = 0xff;
|
||||
|
||||
info->p_dev = p_dev;
|
||||
info->p_dev = link;
|
||||
link->priv = info;
|
||||
|
||||
/* Initialize the dev_link_t structure */
|
||||
/* Initialize the struct pcmcia_device structure */
|
||||
|
||||
/* Interrupt setup */
|
||||
link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
|
||||
@ -592,9 +591,8 @@ static int mgslpc_attach(struct pcmcia_device *p_dev)
|
||||
#define CS_CHECK(fn, ret) \
|
||||
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
|
||||
static void mgslpc_config(dev_link_t *link)
|
||||
static void mgslpc_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
MGSLPC_INFO *info = link->priv;
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
@ -612,9 +610,9 @@ static void mgslpc_config(dev_link_t *link)
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
@ -624,11 +622,11 @@ static void mgslpc_config(dev_link_t *link)
|
||||
/* get CIS configuration entry */
|
||||
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
|
||||
cfg = &(parse.cftable_entry);
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
|
||||
if (cfg->flags & CISTPL_CFTABLE_DEFAULT) dflt = *cfg;
|
||||
if (cfg->index == 0)
|
||||
@ -649,7 +647,7 @@ static void mgslpc_config(dev_link_t *link)
|
||||
link->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;
|
||||
link->io.BasePort1 = io->win[0].base;
|
||||
link->io.NumPorts1 = io->win[0].len;
|
||||
CS_CHECK(RequestIO, pcmcia_request_io(link->handle, &link->io));
|
||||
CS_CHECK(RequestIO, pcmcia_request_io(link, &link->io));
|
||||
}
|
||||
|
||||
link->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
@ -660,9 +658,9 @@ static void mgslpc_config(dev_link_t *link)
|
||||
link->irq.Attributes |= IRQ_HANDLE_PRESENT;
|
||||
link->irq.Handler = mgslpc_isr;
|
||||
link->irq.Instance = info;
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link->handle, &link->irq));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link->handle, &link->conf));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
|
||||
info->io_base = link->io.BasePort1;
|
||||
info->irq_level = link->irq.AssignedIRQ;
|
||||
@ -685,7 +683,7 @@ static void mgslpc_config(dev_link_t *link)
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
mgslpc_release((u_long)link);
|
||||
}
|
||||
|
||||
@ -695,18 +693,16 @@ cs_failed:
|
||||
*/
|
||||
static void mgslpc_release(u_long arg)
|
||||
{
|
||||
dev_link_t *link = (dev_link_t *)arg;
|
||||
struct pcmcia_device *link = (struct pcmcia_device *)arg;
|
||||
|
||||
if (debug_level >= DEBUG_LEVEL_INFO)
|
||||
printk("mgslpc_release(0x%p)\n", link);
|
||||
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
}
|
||||
|
||||
static void mgslpc_detach(struct pcmcia_device *p_dev)
|
||||
static void mgslpc_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
if (debug_level >= DEBUG_LEVEL_INFO)
|
||||
printk("mgslpc_detach(0x%p)\n", link);
|
||||
|
||||
@ -718,9 +714,8 @@ static void mgslpc_detach(struct pcmcia_device *p_dev)
|
||||
mgslpc_remove_device((MGSLPC_INFO *)link->priv);
|
||||
}
|
||||
|
||||
static int mgslpc_suspend(struct pcmcia_device *dev)
|
||||
static int mgslpc_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(dev);
|
||||
MGSLPC_INFO *info = link->priv;
|
||||
|
||||
info->stop = 1;
|
||||
@ -728,9 +723,8 @@ static int mgslpc_suspend(struct pcmcia_device *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mgslpc_resume(struct pcmcia_device *dev)
|
||||
static int mgslpc_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(dev);
|
||||
MGSLPC_INFO *info = link->priv;
|
||||
|
||||
info->stop = 0;
|
||||
|
@ -87,8 +87,8 @@ typedef struct ide_info_t {
|
||||
int hd;
|
||||
} ide_info_t;
|
||||
|
||||
static void ide_release(dev_link_t *);
|
||||
static void ide_config(dev_link_t *);
|
||||
static void ide_release(struct pcmcia_device *);
|
||||
static void ide_config(struct pcmcia_device *);
|
||||
|
||||
static void ide_detach(struct pcmcia_device *p_dev);
|
||||
|
||||
@ -103,10 +103,9 @@ static void ide_detach(struct pcmcia_device *p_dev);
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static int ide_attach(struct pcmcia_device *p_dev)
|
||||
static int ide_attach(struct pcmcia_device *link)
|
||||
{
|
||||
ide_info_t *info;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "ide_attach()\n");
|
||||
|
||||
@ -115,7 +114,7 @@ static int ide_attach(struct pcmcia_device *p_dev)
|
||||
if (!info)
|
||||
return -ENOMEM;
|
||||
|
||||
info->p_dev = p_dev;
|
||||
info->p_dev = link;
|
||||
link->priv = info;
|
||||
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
|
||||
@ -141,10 +140,8 @@ static int ide_attach(struct pcmcia_device *p_dev)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void ide_detach(struct pcmcia_device *p_dev)
|
||||
static void ide_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "ide_detach(0x%p)\n", link);
|
||||
|
||||
if (link->state & DEV_CONFIG)
|
||||
@ -175,9 +172,8 @@ static int idecs_register(unsigned long io, unsigned long ctl, unsigned long irq
|
||||
#define CS_CHECK(fn, ret) \
|
||||
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
|
||||
static void ide_config(dev_link_t *link)
|
||||
static void ide_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
ide_info_t *info = link->priv;
|
||||
tuple_t tuple;
|
||||
struct {
|
||||
@ -201,16 +197,16 @@ static void ide_config(dev_link_t *link)
|
||||
tuple.TupleDataMax = 255;
|
||||
tuple.Attributes = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &stk->parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &stk->parse));
|
||||
link->conf.ConfigBase = stk->parse.config.base;
|
||||
link->conf.Present = stk->parse.config.rmask[0];
|
||||
|
||||
tuple.DesiredTuple = CISTPL_MANFID;
|
||||
if (!pcmcia_get_first_tuple(handle, &tuple) &&
|
||||
!pcmcia_get_tuple_data(handle, &tuple) &&
|
||||
!pcmcia_parse_tuple(handle, &tuple, &stk->parse))
|
||||
if (!pcmcia_get_first_tuple(link, &tuple) &&
|
||||
!pcmcia_get_tuple_data(link, &tuple) &&
|
||||
!pcmcia_parse_tuple(link, &tuple, &stk->parse))
|
||||
is_kme = ((stk->parse.manfid.manf == MANFID_KME) &&
|
||||
((stk->parse.manfid.card == PRODID_KME_KXLC005_A) ||
|
||||
(stk->parse.manfid.card == PRODID_KME_KXLC005_B)));
|
||||
@ -219,15 +215,15 @@ static void ide_config(dev_link_t *link)
|
||||
link->state |= DEV_CONFIG;
|
||||
|
||||
/* Not sure if this is right... look up the current Vcc */
|
||||
CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(handle, &stk->conf));
|
||||
CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(link, &stk->conf));
|
||||
|
||||
pass = io_base = ctl_base = 0;
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
tuple.Attributes = 0;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
while (1) {
|
||||
if (pcmcia_get_tuple_data(handle, &tuple) != 0) goto next_entry;
|
||||
if (pcmcia_parse_tuple(handle, &tuple, &stk->parse) != 0) goto next_entry;
|
||||
if (pcmcia_get_tuple_data(link, &tuple) != 0) goto next_entry;
|
||||
if (pcmcia_parse_tuple(link, &tuple, &stk->parse) != 0) goto next_entry;
|
||||
|
||||
/* Check for matching Vcc, unless we're desperate */
|
||||
if (!pass) {
|
||||
@ -258,14 +254,14 @@ static void ide_config(dev_link_t *link)
|
||||
link->io.NumPorts1 = 8;
|
||||
link->io.BasePort2 = io->win[1].base;
|
||||
link->io.NumPorts2 = (is_kme) ? 2 : 1;
|
||||
if (pcmcia_request_io(link->handle, &link->io) != 0)
|
||||
if (pcmcia_request_io(link, &link->io) != 0)
|
||||
goto next_entry;
|
||||
io_base = link->io.BasePort1;
|
||||
ctl_base = link->io.BasePort2;
|
||||
} else if ((io->nwin == 1) && (io->win[0].len >= 16)) {
|
||||
link->io.NumPorts1 = io->win[0].len;
|
||||
link->io.NumPorts2 = 0;
|
||||
if (pcmcia_request_io(link->handle, &link->io) != 0)
|
||||
if (pcmcia_request_io(link, &link->io) != 0)
|
||||
goto next_entry;
|
||||
io_base = link->io.BasePort1;
|
||||
ctl_base = link->io.BasePort1 + 0x0e;
|
||||
@ -278,16 +274,16 @@ static void ide_config(dev_link_t *link)
|
||||
if (cfg->flags & CISTPL_CFTABLE_DEFAULT)
|
||||
memcpy(&stk->dflt, cfg, sizeof(stk->dflt));
|
||||
if (pass) {
|
||||
CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(handle, &tuple));
|
||||
} else if (pcmcia_get_next_tuple(handle, &tuple) != 0) {
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(link, &tuple));
|
||||
} else if (pcmcia_get_next_tuple(link, &tuple) != 0) {
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
memset(&stk->dflt, 0, sizeof(stk->dflt));
|
||||
pass++;
|
||||
}
|
||||
}
|
||||
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(handle, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(handle, &link->conf));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
|
||||
/* disable drive interrupts during IDE probe */
|
||||
outb(0x02, ctl_base);
|
||||
@ -298,12 +294,12 @@ static void ide_config(dev_link_t *link)
|
||||
|
||||
/* retry registration in case device is still spinning up */
|
||||
for (hd = -1, i = 0; i < 10; i++) {
|
||||
hd = idecs_register(io_base, ctl_base, link->irq.AssignedIRQ, handle);
|
||||
hd = idecs_register(io_base, ctl_base, link->irq.AssignedIRQ, link);
|
||||
if (hd >= 0) break;
|
||||
if (link->io.NumPorts1 == 0x20) {
|
||||
outb(0x02, ctl_base + 0x10);
|
||||
hd = idecs_register(io_base + 0x10, ctl_base + 0x10,
|
||||
link->irq.AssignedIRQ, handle);
|
||||
link->irq.AssignedIRQ, link);
|
||||
if (hd >= 0) {
|
||||
io_base += 0x10;
|
||||
ctl_base += 0x10;
|
||||
@ -338,7 +334,7 @@ err_mem:
|
||||
goto failed;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
failed:
|
||||
kfree(stk);
|
||||
ide_release(link);
|
||||
@ -353,7 +349,7 @@ failed:
|
||||
|
||||
======================================================================*/
|
||||
|
||||
void ide_release(dev_link_t *link)
|
||||
void ide_release(struct pcmcia_device *link)
|
||||
{
|
||||
ide_info_t *info = link->priv;
|
||||
|
||||
@ -366,7 +362,7 @@ void ide_release(dev_link_t *link)
|
||||
}
|
||||
info->ndev = 0;
|
||||
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
} /* ide_release */
|
||||
|
||||
|
||||
|
@ -51,8 +51,8 @@ MODULE_LICENSE("GPL");
|
||||
handler.
|
||||
*/
|
||||
|
||||
static void avmcs_config(dev_link_t *link);
|
||||
static void avmcs_release(dev_link_t *link);
|
||||
static void avmcs_config(struct pcmcia_device *link);
|
||||
static void avmcs_release(struct pcmcia_device *link);
|
||||
|
||||
/*
|
||||
The attach() and detach() entry points are used to create and destroy
|
||||
@ -65,10 +65,10 @@ static void avmcs_detach(struct pcmcia_device *p_dev);
|
||||
/*
|
||||
A linked list of "instances" of the skeleton device. Each actual
|
||||
PCMCIA card corresponds to one device instance, and is described
|
||||
by one dev_link_t structure (defined in ds.h).
|
||||
by one struct pcmcia_device structure (defined in ds.h).
|
||||
|
||||
You may not want to use a linked list for this -- for example, the
|
||||
memory card driver uses an array of dev_link_t pointers, where minor
|
||||
memory card driver uses an array of struct pcmcia_device pointers, where minor
|
||||
device numbers are used to derive the corresponding array index.
|
||||
*/
|
||||
|
||||
@ -78,7 +78,7 @@ static void avmcs_detach(struct pcmcia_device *p_dev);
|
||||
example, ethernet cards, modems). In other cases, there may be
|
||||
many actual or logical devices (SCSI adapters, memory cards with
|
||||
multiple partitions). The dev_node_t structures need to be kept
|
||||
in a linked list starting at the 'dev' field of a dev_link_t
|
||||
in a linked list starting at the 'dev' field of a struct pcmcia_device
|
||||
structure. We allocate them in the card's private data structure,
|
||||
because they generally can't be allocated dynamically.
|
||||
*/
|
||||
@ -145,10 +145,8 @@ static int avmcs_attach(struct pcmcia_device *p_dev)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void avmcs_detach(struct pcmcia_device *p_dev)
|
||||
static void avmcs_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
if (link->state & DEV_CONFIG)
|
||||
avmcs_release(link);
|
||||
|
||||
@ -163,7 +161,7 @@ static void avmcs_detach(struct pcmcia_device *p_dev)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static int get_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
static int get_tuple(struct pcmcia_device *handle, tuple_t *tuple,
|
||||
cisparse_t *parse)
|
||||
{
|
||||
int i = pcmcia_get_tuple_data(handle, tuple);
|
||||
@ -171,7 +169,7 @@ static int get_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
return pcmcia_parse_tuple(handle, tuple, parse);
|
||||
}
|
||||
|
||||
static int first_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
static int first_tuple(struct pcmcia_device *handle, tuple_t *tuple,
|
||||
cisparse_t *parse)
|
||||
{
|
||||
int i = pcmcia_get_first_tuple(handle, tuple);
|
||||
@ -179,7 +177,7 @@ static int first_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
return get_tuple(handle, tuple, parse);
|
||||
}
|
||||
|
||||
static int next_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
static int next_tuple(struct pcmcia_device *handle, tuple_t *tuple,
|
||||
cisparse_t *parse)
|
||||
{
|
||||
int i = pcmcia_get_next_tuple(handle, tuple);
|
||||
@ -187,9 +185,8 @@ static int next_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
return get_tuple(handle, tuple, parse);
|
||||
}
|
||||
|
||||
static void avmcs_config(dev_link_t *link)
|
||||
static void avmcs_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle;
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
cistpl_cftable_entry_t *cf = &parse.cftable_entry;
|
||||
@ -199,8 +196,7 @@ static void avmcs_config(dev_link_t *link)
|
||||
char devname[128];
|
||||
int cardtype;
|
||||
int (*addcard)(unsigned int port, unsigned irq);
|
||||
|
||||
handle = link->handle;
|
||||
|
||||
dev = link->priv;
|
||||
|
||||
/*
|
||||
@ -209,19 +205,19 @@ static void avmcs_config(dev_link_t *link)
|
||||
*/
|
||||
do {
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
i = pcmcia_get_first_tuple(handle, &tuple);
|
||||
i = pcmcia_get_first_tuple(link, &tuple);
|
||||
if (i != CS_SUCCESS) break;
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = 64;
|
||||
tuple.TupleOffset = 0;
|
||||
i = pcmcia_get_tuple_data(handle, &tuple);
|
||||
i = pcmcia_get_tuple_data(link, &tuple);
|
||||
if (i != CS_SUCCESS) break;
|
||||
i = pcmcia_parse_tuple(handle, &tuple, &parse);
|
||||
i = pcmcia_parse_tuple(link, &tuple, &parse);
|
||||
if (i != CS_SUCCESS) break;
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
} while (0);
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, ParseTuple, i);
|
||||
cs_error(link, ParseTuple, i);
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
return;
|
||||
}
|
||||
@ -238,7 +234,7 @@ static void avmcs_config(dev_link_t *link)
|
||||
tuple.DesiredTuple = CISTPL_VERS_1;
|
||||
|
||||
devname[0] = 0;
|
||||
if( !first_tuple(handle, &tuple, &parse) && parse.version_1.ns > 1 ) {
|
||||
if( !first_tuple(link, &tuple, &parse) && parse.version_1.ns > 1 ) {
|
||||
strlcpy(devname,parse.version_1.str + parse.version_1.ofs[1],
|
||||
sizeof(devname));
|
||||
}
|
||||
@ -249,7 +245,7 @@ static void avmcs_config(dev_link_t *link)
|
||||
tuple.TupleOffset = 0; tuple.TupleDataMax = 255;
|
||||
tuple.Attributes = 0;
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
i = first_tuple(handle, &tuple, &parse);
|
||||
i = first_tuple(link, &tuple, &parse);
|
||||
while (i == CS_SUCCESS) {
|
||||
if (cf->io.nwin > 0) {
|
||||
link->conf.ConfigIndex = cf->index;
|
||||
@ -259,36 +255,36 @@ static void avmcs_config(dev_link_t *link)
|
||||
printk(KERN_INFO "avm_cs: testing i/o %#x-%#x\n",
|
||||
link->io.BasePort1,
|
||||
link->io.BasePort1+link->io.NumPorts1-1);
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS) goto found_port;
|
||||
}
|
||||
i = next_tuple(handle, &tuple, &parse);
|
||||
i = next_tuple(link, &tuple, &parse);
|
||||
}
|
||||
|
||||
found_port:
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestIO, i);
|
||||
cs_error(link, RequestIO, i);
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* allocate an interrupt line
|
||||
*/
|
||||
i = pcmcia_request_irq(link->handle, &link->irq);
|
||||
i = pcmcia_request_irq(link, &link->irq);
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestIRQ, i);
|
||||
cs_error(link, RequestIRQ, i);
|
||||
/* undo */
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* configure the PCMCIA socket
|
||||
*/
|
||||
i = pcmcia_request_configuration(link->handle, &link->conf);
|
||||
i = pcmcia_request_configuration(link, &link->conf);
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestConfiguration, i);
|
||||
pcmcia_disable_device(link->handle);
|
||||
cs_error(link, RequestConfiguration, i);
|
||||
pcmcia_disable_device(link);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -351,10 +347,10 @@ found_port:
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void avmcs_release(dev_link_t *link)
|
||||
static void avmcs_release(struct pcmcia_device *link)
|
||||
{
|
||||
b1pcmcia_delcard(link->io.BasePort1, link->irq.AssignedIRQ);
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
} /* avmcs_release */
|
||||
|
||||
|
||||
|
@ -67,8 +67,8 @@ module_param(isdnprot, int, 0);
|
||||
handler.
|
||||
*/
|
||||
|
||||
static void avma1cs_config(dev_link_t *link);
|
||||
static void avma1cs_release(dev_link_t *link);
|
||||
static void avma1cs_config(struct pcmcia_device *link);
|
||||
static void avma1cs_release(struct pcmcia_device *link);
|
||||
|
||||
/*
|
||||
The attach() and detach() entry points are used to create and destroy
|
||||
@ -82,10 +82,10 @@ static void avma1cs_detach(struct pcmcia_device *p_dev);
|
||||
/*
|
||||
A linked list of "instances" of the skeleton device. Each actual
|
||||
PCMCIA card corresponds to one device instance, and is described
|
||||
by one dev_link_t structure (defined in ds.h).
|
||||
by one struct pcmcia_device structure (defined in ds.h).
|
||||
|
||||
You may not want to use a linked list for this -- for example, the
|
||||
memory card driver uses an array of dev_link_t pointers, where minor
|
||||
memory card driver uses an array of struct pcmcia_device pointers, where minor
|
||||
device numbers are used to derive the corresponding array index.
|
||||
*/
|
||||
|
||||
@ -95,7 +95,7 @@ static void avma1cs_detach(struct pcmcia_device *p_dev);
|
||||
example, ethernet cards, modems). In other cases, there may be
|
||||
many actual or logical devices (SCSI adapters, memory cards with
|
||||
multiple partitions). The dev_node_t structures need to be kept
|
||||
in a linked list starting at the 'dev' field of a dev_link_t
|
||||
in a linked list starting at the 'dev' field of a struct pcmcia_device
|
||||
structure. We allocate them in the card's private data structure,
|
||||
because they generally can't be allocated dynamically.
|
||||
*/
|
||||
@ -164,10 +164,8 @@ static int avma1cs_attach(struct pcmcia_device *p_dev)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void avma1cs_detach(struct pcmcia_device *p_dev)
|
||||
static void avma1cs_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "avma1cs_detach(0x%p)\n", link);
|
||||
|
||||
if (link->state & DEV_CONFIG)
|
||||
@ -184,7 +182,7 @@ static void avma1cs_detach(struct pcmcia_device *p_dev)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static int get_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
static int get_tuple(struct pcmcia_device *handle, tuple_t *tuple,
|
||||
cisparse_t *parse)
|
||||
{
|
||||
int i = pcmcia_get_tuple_data(handle, tuple);
|
||||
@ -192,7 +190,7 @@ static int get_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
return pcmcia_parse_tuple(handle, tuple, parse);
|
||||
}
|
||||
|
||||
static int first_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
static int first_tuple(struct pcmcia_device *handle, tuple_t *tuple,
|
||||
cisparse_t *parse)
|
||||
{
|
||||
int i = pcmcia_get_first_tuple(handle, tuple);
|
||||
@ -200,7 +198,7 @@ static int first_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
return get_tuple(handle, tuple, parse);
|
||||
}
|
||||
|
||||
static int next_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
static int next_tuple(struct pcmcia_device *handle, tuple_t *tuple,
|
||||
cisparse_t *parse)
|
||||
{
|
||||
int i = pcmcia_get_next_tuple(handle, tuple);
|
||||
@ -208,9 +206,8 @@ static int next_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
return get_tuple(handle, tuple, parse);
|
||||
}
|
||||
|
||||
static void avma1cs_config(dev_link_t *link)
|
||||
static void avma1cs_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle;
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
cistpl_cftable_entry_t *cf = &parse.cftable_entry;
|
||||
@ -220,8 +217,7 @@ static void avma1cs_config(dev_link_t *link)
|
||||
char devname[128];
|
||||
IsdnCard_t icard;
|
||||
int busy = 0;
|
||||
|
||||
handle = link->handle;
|
||||
|
||||
dev = link->priv;
|
||||
|
||||
DEBUG(0, "avma1cs_config(0x%p)\n", link);
|
||||
@ -232,19 +228,19 @@ static void avma1cs_config(dev_link_t *link)
|
||||
*/
|
||||
do {
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
i = pcmcia_get_first_tuple(handle, &tuple);
|
||||
i = pcmcia_get_first_tuple(link, &tuple);
|
||||
if (i != CS_SUCCESS) break;
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = 64;
|
||||
tuple.TupleOffset = 0;
|
||||
i = pcmcia_get_tuple_data(handle, &tuple);
|
||||
i = pcmcia_get_tuple_data(link, &tuple);
|
||||
if (i != CS_SUCCESS) break;
|
||||
i = pcmcia_parse_tuple(handle, &tuple, &parse);
|
||||
i = pcmcia_parse_tuple(link, &tuple, &parse);
|
||||
if (i != CS_SUCCESS) break;
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
} while (0);
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, ParseTuple, i);
|
||||
cs_error(link, ParseTuple, i);
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
return;
|
||||
}
|
||||
@ -261,7 +257,7 @@ static void avma1cs_config(dev_link_t *link)
|
||||
tuple.DesiredTuple = CISTPL_VERS_1;
|
||||
|
||||
devname[0] = 0;
|
||||
if( !first_tuple(handle, &tuple, &parse) && parse.version_1.ns > 1 ) {
|
||||
if( !first_tuple(link, &tuple, &parse) && parse.version_1.ns > 1 ) {
|
||||
strlcpy(devname,parse.version_1.str + parse.version_1.ofs[1],
|
||||
sizeof(devname));
|
||||
}
|
||||
@ -272,7 +268,7 @@ static void avma1cs_config(dev_link_t *link)
|
||||
tuple.TupleOffset = 0; tuple.TupleDataMax = 255;
|
||||
tuple.Attributes = 0;
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
i = first_tuple(handle, &tuple, &parse);
|
||||
i = first_tuple(link, &tuple, &parse);
|
||||
while (i == CS_SUCCESS) {
|
||||
if (cf->io.nwin > 0) {
|
||||
link->conf.ConfigIndex = cf->index;
|
||||
@ -282,36 +278,36 @@ static void avma1cs_config(dev_link_t *link)
|
||||
printk(KERN_INFO "avma1_cs: testing i/o %#x-%#x\n",
|
||||
link->io.BasePort1,
|
||||
link->io.BasePort1+link->io.NumPorts1 - 1);
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS) goto found_port;
|
||||
}
|
||||
i = next_tuple(handle, &tuple, &parse);
|
||||
i = next_tuple(link, &tuple, &parse);
|
||||
}
|
||||
|
||||
found_port:
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestIO, i);
|
||||
cs_error(link, RequestIO, i);
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* allocate an interrupt line
|
||||
*/
|
||||
i = pcmcia_request_irq(link->handle, &link->irq);
|
||||
i = pcmcia_request_irq(link, &link->irq);
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestIRQ, i);
|
||||
cs_error(link, RequestIRQ, i);
|
||||
/* undo */
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* configure the PCMCIA socket
|
||||
*/
|
||||
i = pcmcia_request_configuration(link->handle, &link->conf);
|
||||
i = pcmcia_request_configuration(link, &link->conf);
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestConfiguration, i);
|
||||
pcmcia_disable_device(link->handle);
|
||||
cs_error(link, RequestConfiguration, i);
|
||||
pcmcia_disable_device(link);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -358,7 +354,7 @@ found_port:
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void avma1cs_release(dev_link_t *link)
|
||||
static void avma1cs_release(struct pcmcia_device *link)
|
||||
{
|
||||
local_info_t *local = link->priv;
|
||||
|
||||
@ -367,7 +363,7 @@ static void avma1cs_release(dev_link_t *link)
|
||||
/* now unregister function with hisax */
|
||||
HiSax_closecard(local->node.minor);
|
||||
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
} /* avma1cs_release */
|
||||
|
||||
|
||||
|
@ -94,8 +94,8 @@ module_param(protocol, int, 0);
|
||||
handler.
|
||||
*/
|
||||
|
||||
static void elsa_cs_config(dev_link_t *link);
|
||||
static void elsa_cs_release(dev_link_t *link);
|
||||
static void elsa_cs_config(struct pcmcia_device *link);
|
||||
static void elsa_cs_release(struct pcmcia_device *link);
|
||||
|
||||
/*
|
||||
The attach() and detach() entry points are used to create and destroy
|
||||
@ -111,7 +111,7 @@ static void elsa_cs_detach(struct pcmcia_device *p_dev);
|
||||
example, ethernet cards, modems). In other cases, there may be
|
||||
many actual or logical devices (SCSI adapters, memory cards with
|
||||
multiple partitions). The dev_node_t structures need to be kept
|
||||
in a linked list starting at the 'dev' field of a dev_link_t
|
||||
in a linked list starting at the 'dev' field of a struct pcmcia_device
|
||||
structure. We allocate them in the card's private data structure,
|
||||
because they generally shouldn't be allocated dynamically.
|
||||
In this case, we also provide a flag to indicate if a device is
|
||||
@ -139,10 +139,9 @@ typedef struct local_info_t {
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static int elsa_cs_attach(struct pcmcia_device *p_dev)
|
||||
static int elsa_cs_attach(struct pcmcia_device *link)
|
||||
{
|
||||
local_info_t *local;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "elsa_cs_attach()\n");
|
||||
|
||||
@ -151,7 +150,7 @@ static int elsa_cs_attach(struct pcmcia_device *p_dev)
|
||||
if (!local) return -ENOMEM;
|
||||
memset(local, 0, sizeof(local_info_t));
|
||||
|
||||
local->p_dev = p_dev;
|
||||
local->p_dev = link;
|
||||
link->priv = local;
|
||||
|
||||
local->cardnr = -1;
|
||||
@ -190,9 +189,8 @@ static int elsa_cs_attach(struct pcmcia_device *p_dev)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void elsa_cs_detach(struct pcmcia_device *p_dev)
|
||||
static void elsa_cs_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
local_info_t *info = link->priv;
|
||||
|
||||
DEBUG(0, "elsa_cs_detach(0x%p)\n", link);
|
||||
@ -213,7 +211,7 @@ static void elsa_cs_detach(struct pcmcia_device *p_dev)
|
||||
device available to the system.
|
||||
|
||||
======================================================================*/
|
||||
static int get_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
static int get_tuple(struct pcmcia_device *handle, tuple_t *tuple,
|
||||
cisparse_t *parse)
|
||||
{
|
||||
int i = pcmcia_get_tuple_data(handle, tuple);
|
||||
@ -221,7 +219,7 @@ static int get_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
return pcmcia_parse_tuple(handle, tuple, parse);
|
||||
}
|
||||
|
||||
static int first_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
static int first_tuple(struct pcmcia_device *handle, tuple_t *tuple,
|
||||
cisparse_t *parse)
|
||||
{
|
||||
int i = pcmcia_get_first_tuple(handle, tuple);
|
||||
@ -229,7 +227,7 @@ static int first_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
return get_tuple(handle, tuple, parse);
|
||||
}
|
||||
|
||||
static int next_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
static int next_tuple(struct pcmcia_device *handle, tuple_t *tuple,
|
||||
cisparse_t *parse)
|
||||
{
|
||||
int i = pcmcia_get_next_tuple(handle, tuple);
|
||||
@ -237,9 +235,8 @@ static int next_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
return get_tuple(handle, tuple, parse);
|
||||
}
|
||||
|
||||
static void elsa_cs_config(dev_link_t *link)
|
||||
static void elsa_cs_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle;
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
local_info_t *dev;
|
||||
@ -249,7 +246,6 @@ static void elsa_cs_config(dev_link_t *link)
|
||||
IsdnCard_t icard;
|
||||
|
||||
DEBUG(0, "elsa_config(0x%p)\n", link);
|
||||
handle = link->handle;
|
||||
dev = link->priv;
|
||||
|
||||
/*
|
||||
@ -261,7 +257,7 @@ static void elsa_cs_config(dev_link_t *link)
|
||||
tuple.TupleDataMax = 255;
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.Attributes = 0;
|
||||
i = first_tuple(handle, &tuple, &parse);
|
||||
i = first_tuple(link, &tuple, &parse);
|
||||
if (i != CS_SUCCESS) {
|
||||
last_fn = ParseTuple;
|
||||
goto cs_failed;
|
||||
@ -276,25 +272,25 @@ static void elsa_cs_config(dev_link_t *link)
|
||||
tuple.TupleOffset = 0; tuple.TupleDataMax = 255;
|
||||
tuple.Attributes = 0;
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
i = first_tuple(handle, &tuple, &parse);
|
||||
i = first_tuple(link, &tuple, &parse);
|
||||
while (i == CS_SUCCESS) {
|
||||
if ( (cf->io.nwin > 0) && cf->io.win[0].base) {
|
||||
printk(KERN_INFO "(elsa_cs: looks like the 96 model)\n");
|
||||
link->conf.ConfigIndex = cf->index;
|
||||
link->io.BasePort1 = cf->io.win[0].base;
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS) break;
|
||||
} else {
|
||||
printk(KERN_INFO "(elsa_cs: looks like the 97 model)\n");
|
||||
link->conf.ConfigIndex = cf->index;
|
||||
for (i = 0, j = 0x2f0; j > 0x100; j -= 0x10) {
|
||||
link->io.BasePort1 = j;
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS) break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
i = next_tuple(handle, &tuple, &parse);
|
||||
i = next_tuple(link, &tuple, &parse);
|
||||
}
|
||||
|
||||
if (i != CS_SUCCESS) {
|
||||
@ -302,14 +298,14 @@ static void elsa_cs_config(dev_link_t *link)
|
||||
goto cs_failed;
|
||||
}
|
||||
|
||||
i = pcmcia_request_irq(link->handle, &link->irq);
|
||||
i = pcmcia_request_irq(link, &link->irq);
|
||||
if (i != CS_SUCCESS) {
|
||||
link->irq.AssignedIRQ = 0;
|
||||
last_fn = RequestIRQ;
|
||||
goto cs_failed;
|
||||
}
|
||||
|
||||
i = pcmcia_request_configuration(link->handle, &link->conf);
|
||||
i = pcmcia_request_configuration(link, &link->conf);
|
||||
if (i != CS_SUCCESS) {
|
||||
last_fn = RequestConfiguration;
|
||||
goto cs_failed;
|
||||
@ -352,7 +348,7 @@ static void elsa_cs_config(dev_link_t *link)
|
||||
|
||||
return;
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, i);
|
||||
cs_error(link, last_fn, i);
|
||||
elsa_cs_release(link);
|
||||
} /* elsa_cs_config */
|
||||
|
||||
@ -364,7 +360,7 @@ cs_failed:
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void elsa_cs_release(dev_link_t *link)
|
||||
static void elsa_cs_release(struct pcmcia_device *link)
|
||||
{
|
||||
local_info_t *local = link->priv;
|
||||
|
||||
@ -377,12 +373,11 @@ static void elsa_cs_release(dev_link_t *link)
|
||||
}
|
||||
}
|
||||
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
} /* elsa_cs_release */
|
||||
|
||||
static int elsa_suspend(struct pcmcia_device *p_dev)
|
||||
static int elsa_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
local_info_t *dev = link->priv;
|
||||
|
||||
dev->busy = 1;
|
||||
@ -390,9 +385,8 @@ static int elsa_suspend(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int elsa_resume(struct pcmcia_device *p_dev)
|
||||
static int elsa_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
local_info_t *dev = link->priv;
|
||||
|
||||
dev->busy = 0;
|
||||
|
@ -95,8 +95,8 @@ module_param(protocol, int, 0);
|
||||
event handler.
|
||||
*/
|
||||
|
||||
static void sedlbauer_config(dev_link_t *link);
|
||||
static void sedlbauer_release(dev_link_t *link);
|
||||
static void sedlbauer_config(struct pcmcia_device *link);
|
||||
static void sedlbauer_release(struct pcmcia_device *link);
|
||||
|
||||
/*
|
||||
The attach() and detach() entry points are used to create and destroy
|
||||
@ -119,7 +119,7 @@ static void sedlbauer_detach(struct pcmcia_device *p_dev);
|
||||
example, ethernet cards, modems). In other cases, there may be
|
||||
many actual or logical devices (SCSI adapters, memory cards with
|
||||
multiple partitions). The dev_node_t structures need to be kept
|
||||
in a linked list starting at the 'dev' field of a dev_link_t
|
||||
in a linked list starting at the 'dev' field of a struct pcmcia_device
|
||||
structure. We allocate them in the card's private data structure,
|
||||
because they generally shouldn't be allocated dynamically.
|
||||
|
||||
@ -148,11 +148,10 @@ typedef struct local_info_t {
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static int sedlbauer_attach(struct pcmcia_device *p_dev)
|
||||
static int sedlbauer_attach(struct pcmcia_device *link)
|
||||
{
|
||||
local_info_t *local;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
|
||||
DEBUG(0, "sedlbauer_attach()\n");
|
||||
|
||||
/* Allocate space for private device-specific data */
|
||||
@ -161,7 +160,7 @@ static int sedlbauer_attach(struct pcmcia_device *p_dev)
|
||||
memset(local, 0, sizeof(local_info_t));
|
||||
local->cardnr = -1;
|
||||
|
||||
local->p_dev = p_dev;
|
||||
local->p_dev = link;
|
||||
link->priv = local;
|
||||
|
||||
/* Interrupt setup */
|
||||
@ -202,10 +201,8 @@ static int sedlbauer_attach(struct pcmcia_device *p_dev)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void sedlbauer_detach(struct pcmcia_device *p_dev)
|
||||
static void sedlbauer_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "sedlbauer_detach(0x%p)\n", link);
|
||||
|
||||
if (link->state & DEV_CONFIG) {
|
||||
@ -227,9 +224,8 @@ static void sedlbauer_detach(struct pcmcia_device *p_dev)
|
||||
#define CS_CHECK(fn, ret) \
|
||||
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
|
||||
static void sedlbauer_config(dev_link_t *link)
|
||||
static void sedlbauer_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
local_info_t *dev = link->priv;
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
@ -251,16 +247,16 @@ static void sedlbauer_config(dev_link_t *link)
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
/* Configure card */
|
||||
link->state |= DEV_CONFIG;
|
||||
|
||||
CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(handle, &conf));
|
||||
CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(link, &conf));
|
||||
|
||||
/*
|
||||
In this loop, we scan the CIS for configuration table entries,
|
||||
@ -275,12 +271,12 @@ static void sedlbauer_config(dev_link_t *link)
|
||||
will only use the CIS to fill in implementation-defined details.
|
||||
*/
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
while (1) {
|
||||
cistpl_cftable_entry_t dflt = { 0 };
|
||||
cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
|
||||
if (pcmcia_get_tuple_data(handle, &tuple) != 0 ||
|
||||
pcmcia_parse_tuple(handle, &tuple, &parse) != 0)
|
||||
if (pcmcia_get_tuple_data(link, &tuple) != 0 ||
|
||||
pcmcia_parse_tuple(link, &tuple, &parse) != 0)
|
||||
goto next_entry;
|
||||
|
||||
if (cfg->flags & CISTPL_CFTABLE_DEFAULT) dflt = *cfg;
|
||||
@ -334,13 +330,13 @@ static void sedlbauer_config(dev_link_t *link)
|
||||
link->io.NumPorts2 = io->win[1].len;
|
||||
}
|
||||
/* This reserves IO space but doesn't actually enable it */
|
||||
if (pcmcia_request_io(link->handle, &link->io) != 0)
|
||||
if (pcmcia_request_io(link, &link->io) != 0)
|
||||
goto next_entry;
|
||||
}
|
||||
|
||||
/*
|
||||
Now set up a common memory window, if needed. There is room
|
||||
in the dev_link_t structure for one memory window handle,
|
||||
in the struct pcmcia_device structure for one memory window handle,
|
||||
but if the base addresses need to be saved, or if multiple
|
||||
windows are needed, the info should go in the private data
|
||||
structure for this device.
|
||||
@ -361,7 +357,7 @@ static void sedlbauer_config(dev_link_t *link)
|
||||
req.Size = 0x1000;
|
||||
*/
|
||||
req.AccessSpeed = 0;
|
||||
if (pcmcia_request_window(&link->handle, &req, &link->win) != 0)
|
||||
if (pcmcia_request_window(&link, &req, &link->win) != 0)
|
||||
goto next_entry;
|
||||
map.Page = 0; map.CardOffset = mem->win[0].card_addr;
|
||||
if (pcmcia_map_mem_page(link->win, &map) != 0)
|
||||
@ -371,7 +367,7 @@ static void sedlbauer_config(dev_link_t *link)
|
||||
break;
|
||||
|
||||
next_entry:
|
||||
CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(handle, &tuple));
|
||||
CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(link, &tuple));
|
||||
}
|
||||
|
||||
/*
|
||||
@ -380,14 +376,14 @@ static void sedlbauer_config(dev_link_t *link)
|
||||
irq structure is initialized.
|
||||
*/
|
||||
if (link->conf.Attributes & CONF_ENABLE_IRQ)
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link->handle, &link->irq));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
|
||||
/*
|
||||
This actually configures the PCMCIA socket -- setting up
|
||||
the I/O windows and the interrupt mapping, and putting the
|
||||
card and host interface into "Memory and IO" mode.
|
||||
*/
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link->handle, &link->conf));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
|
||||
/*
|
||||
At this point, the dev_node_t structure(s) need to be
|
||||
@ -433,7 +429,7 @@ static void sedlbauer_config(dev_link_t *link)
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
sedlbauer_release(link);
|
||||
|
||||
} /* sedlbauer_config */
|
||||
@ -446,7 +442,7 @@ cs_failed:
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void sedlbauer_release(dev_link_t *link)
|
||||
static void sedlbauer_release(struct pcmcia_device *link)
|
||||
{
|
||||
local_info_t *local = link->priv;
|
||||
DEBUG(0, "sedlbauer_release(0x%p)\n", link);
|
||||
@ -458,12 +454,11 @@ static void sedlbauer_release(dev_link_t *link)
|
||||
}
|
||||
}
|
||||
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
} /* sedlbauer_release */
|
||||
|
||||
static int sedlbauer_suspend(struct pcmcia_device *p_dev)
|
||||
static int sedlbauer_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
local_info_t *dev = link->priv;
|
||||
|
||||
dev->stop = 1;
|
||||
@ -471,9 +466,8 @@ static int sedlbauer_suspend(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sedlbauer_resume(struct pcmcia_device *p_dev)
|
||||
static int sedlbauer_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
local_info_t *dev = link->priv;
|
||||
|
||||
dev->stop = 0;
|
||||
|
@ -75,8 +75,8 @@ module_param(protocol, int, 0);
|
||||
handler.
|
||||
*/
|
||||
|
||||
static void teles_cs_config(dev_link_t *link);
|
||||
static void teles_cs_release(dev_link_t *link);
|
||||
static void teles_cs_config(struct pcmcia_device *link);
|
||||
static void teles_cs_release(struct pcmcia_device *link);
|
||||
|
||||
/*
|
||||
The attach() and detach() entry points are used to create and destroy
|
||||
@ -89,10 +89,10 @@ static void teles_detach(struct pcmcia_device *p_dev);
|
||||
/*
|
||||
A linked list of "instances" of the teles_cs device. Each actual
|
||||
PCMCIA card corresponds to one device instance, and is described
|
||||
by one dev_link_t structure (defined in ds.h).
|
||||
by one struct pcmcia_device structure (defined in ds.h).
|
||||
|
||||
You may not want to use a linked list for this -- for example, the
|
||||
memory card driver uses an array of dev_link_t pointers, where minor
|
||||
memory card driver uses an array of struct pcmcia_device pointers, where minor
|
||||
device numbers are used to derive the corresponding array index.
|
||||
*/
|
||||
|
||||
@ -102,7 +102,7 @@ static void teles_detach(struct pcmcia_device *p_dev);
|
||||
example, ethernet cards, modems). In other cases, there may be
|
||||
many actual or logical devices (SCSI adapters, memory cards with
|
||||
multiple partitions). The dev_node_t structures need to be kept
|
||||
in a linked list starting at the 'dev' field of a dev_link_t
|
||||
in a linked list starting at the 'dev' field of a struct pcmcia_device
|
||||
structure. We allocate them in the card's private data structure,
|
||||
because they generally shouldn't be allocated dynamically.
|
||||
In this case, we also provide a flag to indicate if a device is
|
||||
@ -130,10 +130,9 @@ typedef struct local_info_t {
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static int teles_attach(struct pcmcia_device *p_dev)
|
||||
static int teles_attach(struct pcmcia_device *link)
|
||||
{
|
||||
local_info_t *local;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "teles_attach()\n");
|
||||
|
||||
@ -143,7 +142,7 @@ static int teles_attach(struct pcmcia_device *p_dev)
|
||||
memset(local, 0, sizeof(local_info_t));
|
||||
local->cardnr = -1;
|
||||
|
||||
local->p_dev = p_dev;
|
||||
local->p_dev = link;
|
||||
link->priv = local;
|
||||
|
||||
/* Interrupt setup */
|
||||
@ -180,9 +179,8 @@ static int teles_attach(struct pcmcia_device *p_dev)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void teles_detach(struct pcmcia_device *p_dev)
|
||||
static void teles_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
local_info_t *info = link->priv;
|
||||
|
||||
DEBUG(0, "teles_detach(0x%p)\n", link);
|
||||
@ -203,7 +201,7 @@ static void teles_detach(struct pcmcia_device *p_dev)
|
||||
device available to the system.
|
||||
|
||||
======================================================================*/
|
||||
static int get_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
static int get_tuple(struct pcmcia_device *handle, tuple_t *tuple,
|
||||
cisparse_t *parse)
|
||||
{
|
||||
int i = pcmcia_get_tuple_data(handle, tuple);
|
||||
@ -211,7 +209,7 @@ static int get_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
return pcmcia_parse_tuple(handle, tuple, parse);
|
||||
}
|
||||
|
||||
static int first_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
static int first_tuple(struct pcmcia_device *handle, tuple_t *tuple,
|
||||
cisparse_t *parse)
|
||||
{
|
||||
int i = pcmcia_get_first_tuple(handle, tuple);
|
||||
@ -219,7 +217,7 @@ static int first_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
return get_tuple(handle, tuple, parse);
|
||||
}
|
||||
|
||||
static int next_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
static int next_tuple(struct pcmcia_device *handle, tuple_t *tuple,
|
||||
cisparse_t *parse)
|
||||
{
|
||||
int i = pcmcia_get_next_tuple(handle, tuple);
|
||||
@ -227,9 +225,8 @@ static int next_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
return get_tuple(handle, tuple, parse);
|
||||
}
|
||||
|
||||
static void teles_cs_config(dev_link_t *link)
|
||||
static void teles_cs_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle;
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
local_info_t *dev;
|
||||
@ -239,7 +236,6 @@ static void teles_cs_config(dev_link_t *link)
|
||||
IsdnCard_t icard;
|
||||
|
||||
DEBUG(0, "teles_config(0x%p)\n", link);
|
||||
handle = link->handle;
|
||||
dev = link->priv;
|
||||
|
||||
/*
|
||||
@ -251,7 +247,7 @@ static void teles_cs_config(dev_link_t *link)
|
||||
tuple.TupleDataMax = 255;
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.Attributes = 0;
|
||||
i = first_tuple(handle, &tuple, &parse);
|
||||
i = first_tuple(link, &tuple, &parse);
|
||||
if (i != CS_SUCCESS) {
|
||||
last_fn = ParseTuple;
|
||||
goto cs_failed;
|
||||
@ -266,25 +262,25 @@ static void teles_cs_config(dev_link_t *link)
|
||||
tuple.TupleOffset = 0; tuple.TupleDataMax = 255;
|
||||
tuple.Attributes = 0;
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
i = first_tuple(handle, &tuple, &parse);
|
||||
i = first_tuple(link, &tuple, &parse);
|
||||
while (i == CS_SUCCESS) {
|
||||
if ( (cf->io.nwin > 0) && cf->io.win[0].base) {
|
||||
printk(KERN_INFO "(teles_cs: looks like the 96 model)\n");
|
||||
link->conf.ConfigIndex = cf->index;
|
||||
link->io.BasePort1 = cf->io.win[0].base;
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS) break;
|
||||
} else {
|
||||
printk(KERN_INFO "(teles_cs: looks like the 97 model)\n");
|
||||
link->conf.ConfigIndex = cf->index;
|
||||
for (i = 0, j = 0x2f0; j > 0x100; j -= 0x10) {
|
||||
link->io.BasePort1 = j;
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS) break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
i = next_tuple(handle, &tuple, &parse);
|
||||
i = next_tuple(link, &tuple, &parse);
|
||||
}
|
||||
|
||||
if (i != CS_SUCCESS) {
|
||||
@ -292,14 +288,14 @@ static void teles_cs_config(dev_link_t *link)
|
||||
goto cs_failed;
|
||||
}
|
||||
|
||||
i = pcmcia_request_irq(link->handle, &link->irq);
|
||||
i = pcmcia_request_irq(link, &link->irq);
|
||||
if (i != CS_SUCCESS) {
|
||||
link->irq.AssignedIRQ = 0;
|
||||
last_fn = RequestIRQ;
|
||||
goto cs_failed;
|
||||
}
|
||||
|
||||
i = pcmcia_request_configuration(link->handle, &link->conf);
|
||||
i = pcmcia_request_configuration(link, &link->conf);
|
||||
if (i != CS_SUCCESS) {
|
||||
last_fn = RequestConfiguration;
|
||||
goto cs_failed;
|
||||
@ -342,7 +338,7 @@ static void teles_cs_config(dev_link_t *link)
|
||||
|
||||
return;
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, i);
|
||||
cs_error(link, last_fn, i);
|
||||
teles_cs_release(link);
|
||||
} /* teles_cs_config */
|
||||
|
||||
@ -354,7 +350,7 @@ cs_failed:
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void teles_cs_release(dev_link_t *link)
|
||||
static void teles_cs_release(struct pcmcia_device *link)
|
||||
{
|
||||
local_info_t *local = link->priv;
|
||||
|
||||
@ -367,12 +363,11 @@ static void teles_cs_release(dev_link_t *link)
|
||||
}
|
||||
}
|
||||
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
} /* teles_cs_release */
|
||||
|
||||
static int teles_suspend(struct pcmcia_device *p_dev)
|
||||
static int teles_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
local_info_t *dev = link->priv;
|
||||
|
||||
dev->busy = 1;
|
||||
@ -380,9 +375,8 @@ static int teles_suspend(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int teles_resume(struct pcmcia_device *p_dev)
|
||||
static int teles_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
local_info_t *dev = link->priv;
|
||||
|
||||
dev->busy = 0;
|
||||
|
@ -122,7 +122,7 @@ static caddr_t remap_window(struct map_info *map, unsigned long to)
|
||||
dev->offset, mrq.CardOffset);
|
||||
mrq.Page = 0;
|
||||
if( (ret = pcmcia_map_mem_page(win, &mrq)) != CS_SUCCESS) {
|
||||
cs_error(dev->p_dev->handle, MapMemPage, ret);
|
||||
cs_error(dev->p_dev, MapMemPage, ret);
|
||||
return NULL;
|
||||
}
|
||||
dev->offset = mrq.CardOffset;
|
||||
@ -319,7 +319,7 @@ static void pcmcia_copy_to(struct map_info *map, unsigned long to, const void *f
|
||||
static void pcmciamtd_set_vpp(struct map_info *map, int on)
|
||||
{
|
||||
struct pcmciamtd_dev *dev = (struct pcmciamtd_dev *)map->map_priv_1;
|
||||
dev_link_t *link = dev->p_dev;
|
||||
struct pcmcia_device *link = dev->p_dev;
|
||||
modconf_t mod;
|
||||
int ret;
|
||||
|
||||
@ -328,9 +328,9 @@ static void pcmciamtd_set_vpp(struct map_info *map, int on)
|
||||
mod.Vpp1 = mod.Vpp2 = on ? dev->vpp : 0;
|
||||
|
||||
DEBUG(2, "dev = %p on = %d vpp = %d\n", dev, on, dev->vpp);
|
||||
ret = pcmcia_modify_configuration(link->handle, &mod);
|
||||
ret = pcmcia_modify_configuration(link, &mod);
|
||||
if(ret != CS_SUCCESS) {
|
||||
cs_error(link->handle, ModifyConfiguration, ret);
|
||||
cs_error(link, ModifyConfiguration, ret);
|
||||
}
|
||||
}
|
||||
|
||||
@ -340,7 +340,7 @@ static void pcmciamtd_set_vpp(struct map_info *map, int on)
|
||||
* still open, this will be postponed until it is closed.
|
||||
*/
|
||||
|
||||
static void pcmciamtd_release(dev_link_t *link)
|
||||
static void pcmciamtd_release(struct pcmcia_device *link)
|
||||
{
|
||||
struct pcmciamtd_dev *dev = link->priv;
|
||||
|
||||
@ -353,11 +353,11 @@ static void pcmciamtd_release(dev_link_t *link)
|
||||
}
|
||||
pcmcia_release_window(link->win);
|
||||
}
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
}
|
||||
|
||||
|
||||
static void card_settings(struct pcmciamtd_dev *dev, dev_link_t *link, int *new_name)
|
||||
static void card_settings(struct pcmciamtd_dev *dev, struct pcmcia_device *link, int *new_name)
|
||||
{
|
||||
int rc;
|
||||
tuple_t tuple;
|
||||
@ -370,16 +370,16 @@ static void card_settings(struct pcmciamtd_dev *dev, dev_link_t *link, int *new_
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.DesiredTuple = RETURN_FIRST_TUPLE;
|
||||
|
||||
rc = pcmcia_get_first_tuple(link->handle, &tuple);
|
||||
rc = pcmcia_get_first_tuple(link, &tuple);
|
||||
while(rc == CS_SUCCESS) {
|
||||
rc = pcmcia_get_tuple_data(link->handle, &tuple);
|
||||
rc = pcmcia_get_tuple_data(link, &tuple);
|
||||
if(rc != CS_SUCCESS) {
|
||||
cs_error(link->handle, GetTupleData, rc);
|
||||
cs_error(link, GetTupleData, rc);
|
||||
break;
|
||||
}
|
||||
rc = pcmcia_parse_tuple(link->handle, &tuple, &parse);
|
||||
rc = pcmcia_parse_tuple(link, &tuple, &parse);
|
||||
if(rc != CS_SUCCESS) {
|
||||
cs_error(link->handle, ParseTuple, rc);
|
||||
cs_error(link, ParseTuple, rc);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -450,7 +450,7 @@ static void card_settings(struct pcmciamtd_dev *dev, dev_link_t *link, int *new_
|
||||
DEBUG(2, "Unknown tuple code %d", tuple.TupleCode);
|
||||
}
|
||||
|
||||
rc = pcmcia_get_next_tuple(link->handle, &tuple);
|
||||
rc = pcmcia_get_next_tuple(link, &tuple);
|
||||
}
|
||||
if(!dev->pcmcia_map.size)
|
||||
dev->pcmcia_map.size = MAX_PCMCIA_ADDR;
|
||||
@ -487,7 +487,7 @@ static void card_settings(struct pcmciamtd_dev *dev, dev_link_t *link, int *new_
|
||||
#define CS_CHECK(fn, ret) \
|
||||
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
|
||||
static void pcmciamtd_config(dev_link_t *link)
|
||||
static void pcmciamtd_config(struct pcmcia_device *link)
|
||||
{
|
||||
struct pcmciamtd_dev *dev = link->priv;
|
||||
struct mtd_info *mtd = NULL;
|
||||
@ -507,9 +507,9 @@ static void pcmciamtd_config(dev_link_t *link)
|
||||
link->state |= DEV_CONFIG;
|
||||
|
||||
DEBUG(2, "Validating CIS");
|
||||
ret = pcmcia_validate_cis(link->handle, &cisinfo);
|
||||
ret = pcmcia_validate_cis(link, &cisinfo);
|
||||
if(ret != CS_SUCCESS) {
|
||||
cs_error(link->handle, GetTupleData, ret);
|
||||
cs_error(link, GetTupleData, ret);
|
||||
} else {
|
||||
DEBUG(2, "ValidateCIS found %d chains", cisinfo.Chains);
|
||||
}
|
||||
@ -537,7 +537,7 @@ static void pcmciamtd_config(dev_link_t *link)
|
||||
req.Attributes |= (dev->pcmcia_map.bankwidth == 1) ? WIN_DATA_WIDTH_8 : WIN_DATA_WIDTH_16;
|
||||
req.Base = 0;
|
||||
req.AccessSpeed = mem_speed;
|
||||
link->win = (window_handle_t)link->handle;
|
||||
link->win = (window_handle_t)link;
|
||||
req.Size = (force_size) ? force_size << 20 : MAX_PCMCIA_ADDR;
|
||||
dev->win_size = 0;
|
||||
|
||||
@ -545,7 +545,7 @@ static void pcmciamtd_config(dev_link_t *link)
|
||||
int ret;
|
||||
DEBUG(2, "requesting window with size = %dKiB memspeed = %d",
|
||||
req.Size >> 10, req.AccessSpeed);
|
||||
ret = pcmcia_request_window(&link->handle, &req, &link->win);
|
||||
ret = pcmcia_request_window(&link, &req, &link->win);
|
||||
DEBUG(2, "ret = %d dev->win_size = %d", ret, dev->win_size);
|
||||
if(ret) {
|
||||
req.Size >>= 1;
|
||||
@ -566,7 +566,7 @@ static void pcmciamtd_config(dev_link_t *link)
|
||||
DEBUG(1, "Allocated a window of %dKiB", dev->win_size >> 10);
|
||||
|
||||
/* Get write protect status */
|
||||
CS_CHECK(GetStatus, pcmcia_get_status(link->handle, &status));
|
||||
CS_CHECK(GetStatus, pcmcia_get_status(link, &status));
|
||||
DEBUG(2, "status value: 0x%x window handle = 0x%8.8lx",
|
||||
status.CardState, (unsigned long)link->win);
|
||||
dev->win_base = ioremap(req.Base, req.Size);
|
||||
@ -583,7 +583,7 @@ static void pcmciamtd_config(dev_link_t *link)
|
||||
dev->pcmcia_map.map_priv_2 = (unsigned long)link->win;
|
||||
|
||||
DEBUG(2, "Getting configuration");
|
||||
CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(link->handle, &t));
|
||||
CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(link, &t));
|
||||
DEBUG(2, "Vcc = %d Vpp1 = %d Vpp2 = %d", t.Vcc, t.Vpp1, t.Vpp2);
|
||||
dev->vpp = (vpp) ? vpp : t.Vpp1;
|
||||
link->conf.Attributes = 0;
|
||||
@ -602,9 +602,9 @@ static void pcmciamtd_config(dev_link_t *link)
|
||||
link->conf.ConfigIndex = 0;
|
||||
link->conf.Present = t.Present;
|
||||
DEBUG(2, "Setting Configuration");
|
||||
ret = pcmcia_request_configuration(link->handle, &link->conf);
|
||||
ret = pcmcia_request_configuration(link, &link->conf);
|
||||
if(ret != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestConfiguration, ret);
|
||||
cs_error(link, RequestConfiguration, ret);
|
||||
}
|
||||
|
||||
if(mem_type == 1) {
|
||||
@ -677,7 +677,7 @@ static void pcmciamtd_config(dev_link_t *link)
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
err("CS Error, exiting");
|
||||
pcmciamtd_release(link);
|
||||
return;
|
||||
@ -709,10 +709,8 @@ static int pcmciamtd_resume(struct pcmcia_device *dev)
|
||||
* when the device is released.
|
||||
*/
|
||||
|
||||
static void pcmciamtd_detach(struct pcmcia_device *p_dev)
|
||||
static void pcmciamtd_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(3, "link=0x%p", link);
|
||||
|
||||
if(link->state & DEV_CONFIG) {
|
||||
@ -732,10 +730,9 @@ static void pcmciamtd_detach(struct pcmcia_device *p_dev)
|
||||
* with Card Services.
|
||||
*/
|
||||
|
||||
static int pcmciamtd_attach(struct pcmcia_device *p_dev)
|
||||
static int pcmciamtd_attach(struct pcmcia_device *link)
|
||||
{
|
||||
struct pcmciamtd_dev *dev;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
/* Create new memory card device */
|
||||
dev = kmalloc(sizeof(*dev), GFP_KERNEL);
|
||||
@ -743,7 +740,7 @@ static int pcmciamtd_attach(struct pcmcia_device *p_dev)
|
||||
DEBUG(1, "dev=0x%p", dev);
|
||||
|
||||
memset(dev, 0, sizeof(*dev));
|
||||
dev->p_dev = p_dev;
|
||||
dev->p_dev = link;
|
||||
link->priv = dev;
|
||||
|
||||
link->conf.Attributes = 0;
|
||||
|
@ -225,8 +225,8 @@ static char mii_preamble_required = 0;
|
||||
|
||||
/* Index of functions. */
|
||||
|
||||
static void tc574_config(dev_link_t *link);
|
||||
static void tc574_release(dev_link_t *link);
|
||||
static void tc574_config(struct pcmcia_device *link);
|
||||
static void tc574_release(struct pcmcia_device *link);
|
||||
|
||||
static void mdio_sync(kio_addr_t ioaddr, int bits);
|
||||
static int mdio_read(kio_addr_t ioaddr, int phy_id, int location);
|
||||
@ -256,11 +256,10 @@ static void tc574_detach(struct pcmcia_device *p_dev);
|
||||
with Card Services.
|
||||
*/
|
||||
|
||||
static int tc574_attach(struct pcmcia_device *p_dev)
|
||||
static int tc574_attach(struct pcmcia_device *link)
|
||||
{
|
||||
struct el3_private *lp;
|
||||
struct net_device *dev;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "3c574_attach()\n");
|
||||
|
||||
@ -270,7 +269,7 @@ static int tc574_attach(struct pcmcia_device *p_dev)
|
||||
return -ENOMEM;
|
||||
lp = netdev_priv(dev);
|
||||
link->priv = dev;
|
||||
lp->p_dev = p_dev;
|
||||
lp->p_dev = link;
|
||||
|
||||
spin_lock_init(&lp->window_lock);
|
||||
link->io.NumPorts1 = 32;
|
||||
@ -312,9 +311,8 @@ static int tc574_attach(struct pcmcia_device *p_dev)
|
||||
|
||||
*/
|
||||
|
||||
static void tc574_detach(struct pcmcia_device *p_dev)
|
||||
static void tc574_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
DEBUG(0, "3c574_detach(0x%p)\n", link);
|
||||
@ -339,9 +337,8 @@ static void tc574_detach(struct pcmcia_device *p_dev)
|
||||
|
||||
static const char *ram_split[] = {"5:3", "3:1", "1:1", "3:5"};
|
||||
|
||||
static void tc574_config(dev_link_t *link)
|
||||
static void tc574_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
struct net_device *dev = link->priv;
|
||||
struct el3_private *lp = netdev_priv(dev);
|
||||
tuple_t tuple;
|
||||
@ -359,12 +356,12 @@ static void tc574_config(dev_link_t *link)
|
||||
|
||||
tuple.Attributes = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
tuple.TupleData = (cisdata_t *)buf;
|
||||
tuple.TupleDataMax = 64;
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
@ -374,15 +371,15 @@ static void tc574_config(dev_link_t *link)
|
||||
link->io.IOAddrLines = 16;
|
||||
for (i = j = 0; j < 0x400; j += 0x20) {
|
||||
link->io.BasePort1 = j ^ 0x300;
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS) break;
|
||||
}
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestIO, i);
|
||||
cs_error(link, RequestIO, i);
|
||||
goto failed;
|
||||
}
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link->handle, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link->handle, &link->conf));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
|
||||
dev->irq = link->irq.AssignedIRQ;
|
||||
dev->base_addr = link->io.BasePort1;
|
||||
@ -393,8 +390,8 @@ static void tc574_config(dev_link_t *link)
|
||||
the hardware address. The future products may include a modem chip
|
||||
and put the address in the CIS. */
|
||||
tuple.DesiredTuple = 0x88;
|
||||
if (pcmcia_get_first_tuple(handle, &tuple) == CS_SUCCESS) {
|
||||
pcmcia_get_tuple_data(handle, &tuple);
|
||||
if (pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) {
|
||||
pcmcia_get_tuple_data(link, &tuple);
|
||||
for (i = 0; i < 3; i++)
|
||||
phys_addr[i] = htons(buf[i]);
|
||||
} else {
|
||||
@ -408,9 +405,9 @@ static void tc574_config(dev_link_t *link)
|
||||
}
|
||||
}
|
||||
tuple.DesiredTuple = CISTPL_VERS_1;
|
||||
if (pcmcia_get_first_tuple(handle, &tuple) == CS_SUCCESS &&
|
||||
pcmcia_get_tuple_data(handle, &tuple) == CS_SUCCESS &&
|
||||
pcmcia_parse_tuple(handle, &tuple, &parse) == CS_SUCCESS) {
|
||||
if (pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS &&
|
||||
pcmcia_get_tuple_data(link, &tuple) == CS_SUCCESS &&
|
||||
pcmcia_parse_tuple(link, &tuple, &parse) == CS_SUCCESS) {
|
||||
cardname = parse.version_1.str + parse.version_1.ofs[1];
|
||||
} else
|
||||
cardname = "3Com 3c574";
|
||||
@ -471,7 +468,7 @@ static void tc574_config(dev_link_t *link)
|
||||
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
link->dev_node = &lp->node;
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(handle));
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(link));
|
||||
|
||||
if (register_netdev(dev) != 0) {
|
||||
printk(KERN_NOTICE "3c574_cs: register_netdev() failed\n");
|
||||
@ -492,7 +489,7 @@ static void tc574_config(dev_link_t *link)
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
failed:
|
||||
tc574_release(link);
|
||||
return;
|
||||
@ -505,14 +502,13 @@ failed:
|
||||
still open, this will be postponed until it is closed.
|
||||
*/
|
||||
|
||||
static void tc574_release(dev_link_t *link)
|
||||
static void tc574_release(struct pcmcia_device *link)
|
||||
{
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
}
|
||||
|
||||
static int tc574_suspend(struct pcmcia_device *p_dev)
|
||||
static int tc574_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
if ((link->state & DEV_CONFIG) && (link->open))
|
||||
@ -521,9 +517,8 @@ static int tc574_suspend(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tc574_resume(struct pcmcia_device *p_dev)
|
||||
static int tc574_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
if ((link->state & DEV_CONFIG) && (link->open)) {
|
||||
@ -739,7 +734,7 @@ static void tc574_reset(struct net_device *dev)
|
||||
static int el3_open(struct net_device *dev)
|
||||
{
|
||||
struct el3_private *lp = netdev_priv(dev);
|
||||
dev_link_t *link = lp->p_dev;
|
||||
struct pcmcia_device *link = lp->p_dev;
|
||||
|
||||
if (!DEV_OK(link))
|
||||
return -ENODEV;
|
||||
@ -1185,7 +1180,7 @@ static int el3_close(struct net_device *dev)
|
||||
{
|
||||
kio_addr_t ioaddr = dev->base_addr;
|
||||
struct el3_private *lp = netdev_priv(dev);
|
||||
dev_link_t *link = lp->p_dev;
|
||||
struct pcmcia_device *link = lp->p_dev;
|
||||
|
||||
DEBUG(2, "%s: shutting down ethercard.\n", dev->name);
|
||||
|
||||
|
@ -142,8 +142,8 @@ DRV_NAME ".c " DRV_VERSION " 2001/10/13 00:08:50 (David Hinds)";
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
static void tc589_config(dev_link_t *link);
|
||||
static void tc589_release(dev_link_t *link);
|
||||
static void tc589_config(struct pcmcia_device *link);
|
||||
static void tc589_release(struct pcmcia_device *link);
|
||||
|
||||
static u16 read_eeprom(kio_addr_t ioaddr, int index);
|
||||
static void tc589_reset(struct net_device *dev);
|
||||
@ -170,11 +170,10 @@ static void tc589_detach(struct pcmcia_device *p_dev);
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static int tc589_attach(struct pcmcia_device *p_dev)
|
||||
static int tc589_attach(struct pcmcia_device *link)
|
||||
{
|
||||
struct el3_private *lp;
|
||||
struct net_device *dev;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "3c589_attach()\n");
|
||||
|
||||
@ -184,7 +183,7 @@ static int tc589_attach(struct pcmcia_device *p_dev)
|
||||
return -ENOMEM;
|
||||
lp = netdev_priv(dev);
|
||||
link->priv = dev;
|
||||
lp->p_dev = p_dev;
|
||||
lp->p_dev = link;
|
||||
|
||||
spin_lock_init(&lp->lock);
|
||||
link->io.NumPorts1 = 16;
|
||||
@ -227,9 +226,8 @@ static int tc589_attach(struct pcmcia_device *p_dev)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void tc589_detach(struct pcmcia_device *p_dev)
|
||||
static void tc589_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
DEBUG(0, "3c589_detach(0x%p)\n", link);
|
||||
@ -254,9 +252,8 @@ static void tc589_detach(struct pcmcia_device *p_dev)
|
||||
#define CS_CHECK(fn, ret) \
|
||||
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
|
||||
static void tc589_config(dev_link_t *link)
|
||||
static void tc589_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
struct net_device *dev = link->priv;
|
||||
struct el3_private *lp = netdev_priv(dev);
|
||||
tuple_t tuple;
|
||||
@ -271,20 +268,20 @@ static void tc589_config(dev_link_t *link)
|
||||
phys_addr = (u16 *)dev->dev_addr;
|
||||
tuple.Attributes = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
tuple.TupleData = (cisdata_t *)buf;
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
/* Is this a 3c562? */
|
||||
tuple.DesiredTuple = CISTPL_MANFID;
|
||||
tuple.Attributes = TUPLE_RETURN_COMMON;
|
||||
if ((pcmcia_get_first_tuple(handle, &tuple) == CS_SUCCESS) &&
|
||||
(pcmcia_get_tuple_data(handle, &tuple) == CS_SUCCESS)) {
|
||||
if ((pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) &&
|
||||
(pcmcia_get_tuple_data(link, &tuple) == CS_SUCCESS)) {
|
||||
if (le16_to_cpu(buf[0]) != MANFID_3COM)
|
||||
printk(KERN_INFO "3c589_cs: hmmm, is this really a "
|
||||
"3Com card??\n");
|
||||
@ -299,15 +296,15 @@ static void tc589_config(dev_link_t *link)
|
||||
for (i = j = 0; j < 0x400; j += 0x10) {
|
||||
if (multi && (j & 0x80)) continue;
|
||||
link->io.BasePort1 = j ^ 0x300;
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS) break;
|
||||
}
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestIO, i);
|
||||
cs_error(link, RequestIO, i);
|
||||
goto failed;
|
||||
}
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link->handle, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link->handle, &link->conf));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
|
||||
dev->irq = link->irq.AssignedIRQ;
|
||||
dev->base_addr = link->io.BasePort1;
|
||||
@ -317,8 +314,8 @@ static void tc589_config(dev_link_t *link)
|
||||
/* The 3c589 has an extra EEPROM for configuration info, including
|
||||
the hardware address. The 3c562 puts the address in the CIS. */
|
||||
tuple.DesiredTuple = 0x88;
|
||||
if (pcmcia_get_first_tuple(handle, &tuple) == CS_SUCCESS) {
|
||||
pcmcia_get_tuple_data(handle, &tuple);
|
||||
if (pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) {
|
||||
pcmcia_get_tuple_data(link, &tuple);
|
||||
for (i = 0; i < 3; i++)
|
||||
phys_addr[i] = htons(buf[i]);
|
||||
} else {
|
||||
@ -344,7 +341,7 @@ static void tc589_config(dev_link_t *link)
|
||||
|
||||
link->dev_node = &lp->node;
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(handle));
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(link));
|
||||
|
||||
if (register_netdev(dev) != 0) {
|
||||
printk(KERN_ERR "3c589_cs: register_netdev() failed\n");
|
||||
@ -365,7 +362,7 @@ static void tc589_config(dev_link_t *link)
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
failed:
|
||||
tc589_release(link);
|
||||
return;
|
||||
@ -380,14 +377,13 @@ failed:
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void tc589_release(dev_link_t *link)
|
||||
static void tc589_release(struct pcmcia_device *link)
|
||||
{
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
}
|
||||
|
||||
static int tc589_suspend(struct pcmcia_device *p_dev)
|
||||
static int tc589_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
if ((link->state & DEV_CONFIG) && (link->open))
|
||||
@ -396,9 +392,8 @@ static int tc589_suspend(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tc589_resume(struct pcmcia_device *p_dev)
|
||||
static int tc589_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
if ((link->state & DEV_CONFIG) && (link->open)) {
|
||||
@ -569,7 +564,7 @@ static int el3_config(struct net_device *dev, struct ifmap *map)
|
||||
static int el3_open(struct net_device *dev)
|
||||
{
|
||||
struct el3_private *lp = netdev_priv(dev);
|
||||
dev_link_t *link = lp->p_dev;
|
||||
struct pcmcia_device *link = lp->p_dev;
|
||||
|
||||
if (!DEV_OK(link))
|
||||
return -ENODEV;
|
||||
@ -830,7 +825,7 @@ static struct net_device_stats *el3_get_stats(struct net_device *dev)
|
||||
{
|
||||
struct el3_private *lp = netdev_priv(dev);
|
||||
unsigned long flags;
|
||||
dev_link_t *link = lp->p_dev;
|
||||
struct pcmcia_device *link = lp->p_dev;
|
||||
|
||||
if (DEV_OK(link)) {
|
||||
spin_lock_irqsave(&lp->lock, flags);
|
||||
@ -932,7 +927,7 @@ static int el3_rx(struct net_device *dev)
|
||||
static void set_multicast_list(struct net_device *dev)
|
||||
{
|
||||
struct el3_private *lp = netdev_priv(dev);
|
||||
dev_link_t *link = lp->p_dev;
|
||||
struct pcmcia_device *link = lp->p_dev;
|
||||
kio_addr_t ioaddr = dev->base_addr;
|
||||
u16 opts = SetRxFilter | RxStation | RxBroadcast;
|
||||
|
||||
@ -947,7 +942,7 @@ static void set_multicast_list(struct net_device *dev)
|
||||
static int el3_close(struct net_device *dev)
|
||||
{
|
||||
struct el3_private *lp = netdev_priv(dev);
|
||||
dev_link_t *link = lp->p_dev;
|
||||
struct pcmcia_device *link = lp->p_dev;
|
||||
kio_addr_t ioaddr = dev->base_addr;
|
||||
|
||||
DEBUG(1, "%s: shutting down ethercard.\n", dev->name);
|
||||
|
@ -86,8 +86,8 @@ static char *version =
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
static void axnet_config(dev_link_t *link);
|
||||
static void axnet_release(dev_link_t *link);
|
||||
static void axnet_config(struct pcmcia_device *link);
|
||||
static void axnet_release(struct pcmcia_device *link);
|
||||
static int axnet_open(struct net_device *dev);
|
||||
static int axnet_close(struct net_device *dev);
|
||||
static int axnet_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
|
||||
@ -142,11 +142,10 @@ static inline axnet_dev_t *PRIV(struct net_device *dev)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static int axnet_attach(struct pcmcia_device *p_dev)
|
||||
static int axnet_attach(struct pcmcia_device *link)
|
||||
{
|
||||
axnet_dev_t *info;
|
||||
struct net_device *dev;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "axnet_attach()\n");
|
||||
|
||||
@ -157,7 +156,7 @@ static int axnet_attach(struct pcmcia_device *p_dev)
|
||||
return -ENOMEM;
|
||||
|
||||
info = PRIV(dev);
|
||||
info->p_dev = p_dev;
|
||||
info->p_dev = link;
|
||||
link->priv = dev;
|
||||
link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
|
||||
link->irq.IRQInfo1 = IRQ_LEVEL_ID;
|
||||
@ -184,9 +183,8 @@ static int axnet_attach(struct pcmcia_device *p_dev)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void axnet_detach(struct pcmcia_device *p_dev)
|
||||
static void axnet_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
DEBUG(0, "axnet_detach(0x%p)\n", link);
|
||||
@ -206,7 +204,7 @@ static void axnet_detach(struct pcmcia_device *p_dev)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static int get_prom(dev_link_t *link)
|
||||
static int get_prom(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev = link->priv;
|
||||
kio_addr_t ioaddr = dev->base_addr;
|
||||
@ -260,7 +258,7 @@ static int get_prom(dev_link_t *link)
|
||||
#define CS_CHECK(fn, ret) \
|
||||
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
|
||||
static int try_io_port(dev_link_t *link)
|
||||
static int try_io_port(struct pcmcia_device *link)
|
||||
{
|
||||
int j, ret;
|
||||
if (link->io.NumPorts1 == 32) {
|
||||
@ -281,18 +279,17 @@ static int try_io_port(dev_link_t *link)
|
||||
for (j = 0; j < 0x400; j += 0x20) {
|
||||
link->io.BasePort1 = j ^ 0x300;
|
||||
link->io.BasePort2 = (j ^ 0x300) + 0x10;
|
||||
ret = pcmcia_request_io(link->handle, &link->io);
|
||||
ret = pcmcia_request_io(link, &link->io);
|
||||
if (ret == CS_SUCCESS) return ret;
|
||||
}
|
||||
return ret;
|
||||
} else {
|
||||
return pcmcia_request_io(link->handle, &link->io);
|
||||
return pcmcia_request_io(link, &link->io);
|
||||
}
|
||||
}
|
||||
|
||||
static void axnet_config(dev_link_t *link)
|
||||
static void axnet_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
struct net_device *dev = link->priv;
|
||||
axnet_dev_t *info = PRIV(dev);
|
||||
tuple_t tuple;
|
||||
@ -307,9 +304,9 @@ static void axnet_config(dev_link_t *link)
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
/* don't trust the CIS on this; Linksys got it wrong */
|
||||
link->conf.Present = 0x63;
|
||||
@ -319,13 +316,13 @@ static void axnet_config(dev_link_t *link)
|
||||
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
tuple.Attributes = 0;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
while (last_ret == CS_SUCCESS) {
|
||||
cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
|
||||
cistpl_io_t *io = &(parse.cftable_entry.io);
|
||||
|
||||
if (pcmcia_get_tuple_data(handle, &tuple) != 0 ||
|
||||
pcmcia_parse_tuple(handle, &tuple, &parse) != 0 ||
|
||||
if (pcmcia_get_tuple_data(link, &tuple) != 0 ||
|
||||
pcmcia_parse_tuple(link, &tuple, &parse) != 0 ||
|
||||
cfg->index == 0 || cfg->io.nwin == 0)
|
||||
goto next_entry;
|
||||
|
||||
@ -347,21 +344,21 @@ static void axnet_config(dev_link_t *link)
|
||||
if (last_ret == CS_SUCCESS) break;
|
||||
}
|
||||
next_entry:
|
||||
last_ret = pcmcia_get_next_tuple(handle, &tuple);
|
||||
last_ret = pcmcia_get_next_tuple(link, &tuple);
|
||||
}
|
||||
if (last_ret != CS_SUCCESS) {
|
||||
cs_error(handle, RequestIO, last_ret);
|
||||
cs_error(link, RequestIO, last_ret);
|
||||
goto failed;
|
||||
}
|
||||
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(handle, &link->irq));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
|
||||
if (link->io.NumPorts2 == 8) {
|
||||
link->conf.Attributes |= CONF_ENABLE_SPKR;
|
||||
link->conf.Status = CCSR_AUDIO_ENA;
|
||||
}
|
||||
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(handle, &link->conf));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
dev->irq = link->irq.AssignedIRQ;
|
||||
dev->base_addr = link->io.BasePort1;
|
||||
|
||||
@ -398,7 +395,7 @@ static void axnet_config(dev_link_t *link)
|
||||
Bit 2 of CCSR is active low. */
|
||||
if (i == 32) {
|
||||
conf_reg_t reg = { 0, CS_WRITE, CISREG_CCSR, 0x04 };
|
||||
pcmcia_access_configuration_register(link->handle, ®);
|
||||
pcmcia_access_configuration_register(link, ®);
|
||||
for (i = 0; i < 32; i++) {
|
||||
j = mdio_read(dev->base_addr + AXNET_MII_EEP, i, 1);
|
||||
if ((j != 0) && (j != 0xffff)) break;
|
||||
@ -408,7 +405,7 @@ static void axnet_config(dev_link_t *link)
|
||||
info->phy_id = (i < 32) ? i : -1;
|
||||
link->dev_node = &info->node;
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(handle));
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(link));
|
||||
|
||||
if (register_netdev(dev) != 0) {
|
||||
printk(KERN_NOTICE "axnet_cs: register_netdev() failed\n");
|
||||
@ -431,7 +428,7 @@ static void axnet_config(dev_link_t *link)
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
failed:
|
||||
axnet_release(link);
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
@ -446,14 +443,13 @@ failed:
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void axnet_release(dev_link_t *link)
|
||||
static void axnet_release(struct pcmcia_device *link)
|
||||
{
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
}
|
||||
|
||||
static int axnet_suspend(struct pcmcia_device *p_dev)
|
||||
static int axnet_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
if ((link->state & DEV_CONFIG) && (link->open))
|
||||
@ -462,9 +458,8 @@ static int axnet_suspend(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int axnet_resume(struct pcmcia_device *p_dev)
|
||||
static int axnet_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
if ((link->state & DEV_CONFIG) && (link->open)) {
|
||||
@ -540,7 +535,7 @@ static void mdio_write(kio_addr_t addr, int phy_id, int loc, int value)
|
||||
static int axnet_open(struct net_device *dev)
|
||||
{
|
||||
axnet_dev_t *info = PRIV(dev);
|
||||
dev_link_t *link = info->p_dev;
|
||||
struct pcmcia_device *link = info->p_dev;
|
||||
|
||||
DEBUG(2, "axnet_open('%s')\n", dev->name);
|
||||
|
||||
@ -566,7 +561,7 @@ static int axnet_open(struct net_device *dev)
|
||||
static int axnet_close(struct net_device *dev)
|
||||
{
|
||||
axnet_dev_t *info = PRIV(dev);
|
||||
dev_link_t *link = info->p_dev;
|
||||
struct pcmcia_device *link = info->p_dev;
|
||||
|
||||
DEBUG(2, "axnet_close('%s')\n", dev->name);
|
||||
|
||||
|
@ -118,8 +118,8 @@ MODULE_LICENSE("GPL");
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
static void com20020_config(dev_link_t *link);
|
||||
static void com20020_release(dev_link_t *link);
|
||||
static void com20020_config(struct pcmcia_device *link);
|
||||
static void com20020_release(struct pcmcia_device *link);
|
||||
|
||||
static void com20020_detach(struct pcmcia_device *p_dev);
|
||||
|
||||
@ -198,9 +198,8 @@ fail_alloc_info:
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void com20020_detach(struct pcmcia_device *p_dev)
|
||||
static void com20020_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct com20020_dev_t *info = link->priv;
|
||||
struct net_device *dev = info->dev;
|
||||
|
||||
@ -251,10 +250,9 @@ static void com20020_detach(struct pcmcia_device *p_dev)
|
||||
#define CS_CHECK(fn, ret) \
|
||||
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
|
||||
static void com20020_config(dev_link_t *link)
|
||||
static void com20020_config(struct pcmcia_device *link)
|
||||
{
|
||||
struct arcnet_local *lp;
|
||||
client_handle_t handle;
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
com20020_dev_t *info;
|
||||
@ -263,7 +261,6 @@ static void com20020_config(dev_link_t *link)
|
||||
u_char buf[64];
|
||||
int ioaddr;
|
||||
|
||||
handle = link->handle;
|
||||
info = link->priv;
|
||||
dev = info->dev;
|
||||
|
||||
@ -276,9 +273,9 @@ static void com20020_config(dev_link_t *link)
|
||||
tuple.TupleDataMax = 64;
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
|
||||
/* Configure card */
|
||||
@ -291,13 +288,13 @@ static void com20020_config(dev_link_t *link)
|
||||
for (ioaddr = 0x100; ioaddr < 0x400; ioaddr += 0x10)
|
||||
{
|
||||
link->io.BasePort1 = ioaddr;
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS)
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
|
||||
if (i != CS_SUCCESS)
|
||||
{
|
||||
@ -311,7 +308,7 @@ static void com20020_config(dev_link_t *link)
|
||||
DEBUG(1,"arcnet: request IRQ %d (%Xh/%Xh)\n",
|
||||
link->irq.AssignedIRQ,
|
||||
link->irq.IRQInfo1, link->irq.IRQInfo2);
|
||||
i = pcmcia_request_irq(link->handle, &link->irq);
|
||||
i = pcmcia_request_irq(link, &link->irq);
|
||||
if (i != CS_SUCCESS)
|
||||
{
|
||||
DEBUG(1,"arcnet: requestIRQ failed totally!\n");
|
||||
@ -320,7 +317,7 @@ static void com20020_config(dev_link_t *link)
|
||||
|
||||
dev->irq = link->irq.AssignedIRQ;
|
||||
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link->handle, &link->conf));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
|
||||
if (com20020_check(dev))
|
||||
{
|
||||
@ -334,7 +331,7 @@ static void com20020_config(dev_link_t *link)
|
||||
|
||||
link->dev_node = &info->node;
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(handle));
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(link));
|
||||
|
||||
i = com20020_found(dev, 0); /* calls register_netdev */
|
||||
|
||||
@ -351,7 +348,7 @@ static void com20020_config(dev_link_t *link)
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
failed:
|
||||
DEBUG(1,"com20020_config failed...\n");
|
||||
com20020_release(link);
|
||||
@ -365,15 +362,14 @@ failed:
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void com20020_release(dev_link_t *link)
|
||||
static void com20020_release(struct pcmcia_device *link)
|
||||
{
|
||||
DEBUG(0, "com20020_release(0x%p)\n", link);
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
}
|
||||
|
||||
static int com20020_suspend(struct pcmcia_device *p_dev)
|
||||
static int com20020_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
com20020_dev_t *info = link->priv;
|
||||
struct net_device *dev = info->dev;
|
||||
|
||||
@ -383,9 +379,8 @@ static int com20020_suspend(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int com20020_resume(struct pcmcia_device *p_dev)
|
||||
static int com20020_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
com20020_dev_t *info = link->priv;
|
||||
struct net_device *dev = info->dev;
|
||||
|
||||
|
@ -84,10 +84,10 @@ static char *version = DRV_NAME ".c " DRV_VERSION " 2002/03/23";
|
||||
/*
|
||||
PCMCIA event handlers
|
||||
*/
|
||||
static void fmvj18x_config(dev_link_t *link);
|
||||
static int fmvj18x_get_hwinfo(dev_link_t *link, u_char *node_id);
|
||||
static int fmvj18x_setup_mfc(dev_link_t *link);
|
||||
static void fmvj18x_release(dev_link_t *link);
|
||||
static void fmvj18x_config(struct pcmcia_device *link);
|
||||
static int fmvj18x_get_hwinfo(struct pcmcia_device *link, u_char *node_id);
|
||||
static int fmvj18x_setup_mfc(struct pcmcia_device *link);
|
||||
static void fmvj18x_release(struct pcmcia_device *link);
|
||||
static void fmvj18x_detach(struct pcmcia_device *p_dev);
|
||||
|
||||
/*
|
||||
@ -228,11 +228,10 @@ typedef struct local_info_t {
|
||||
#define BANK_1U 0x24 /* bank 1 (CONFIG_1) */
|
||||
#define BANK_2U 0x28 /* bank 2 (CONFIG_1) */
|
||||
|
||||
static int fmvj18x_attach(struct pcmcia_device *p_dev)
|
||||
static int fmvj18x_attach(struct pcmcia_device *link)
|
||||
{
|
||||
local_info_t *lp;
|
||||
struct net_device *dev;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "fmvj18x_attach()\n");
|
||||
|
||||
@ -242,7 +241,7 @@ static int fmvj18x_attach(struct pcmcia_device *p_dev)
|
||||
return -ENOMEM;
|
||||
lp = netdev_priv(dev);
|
||||
link->priv = dev;
|
||||
lp->p_dev = p_dev;
|
||||
lp->p_dev = link;
|
||||
|
||||
/* The io structure describes IO port mapping */
|
||||
link->io.NumPorts1 = 32;
|
||||
@ -281,9 +280,8 @@ static int fmvj18x_attach(struct pcmcia_device *p_dev)
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
static void fmvj18x_detach(struct pcmcia_device *p_dev)
|
||||
static void fmvj18x_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
DEBUG(0, "fmvj18x_detach(0x%p)\n", link);
|
||||
@ -302,7 +300,7 @@ static void fmvj18x_detach(struct pcmcia_device *p_dev)
|
||||
#define CS_CHECK(fn, ret) \
|
||||
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
|
||||
static int mfc_try_io_port(dev_link_t *link)
|
||||
static int mfc_try_io_port(struct pcmcia_device *link)
|
||||
{
|
||||
int i, ret;
|
||||
static const kio_addr_t serial_base[5] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8, 0x0 };
|
||||
@ -314,13 +312,13 @@ static int mfc_try_io_port(dev_link_t *link)
|
||||
link->io.NumPorts2 = 0;
|
||||
printk(KERN_NOTICE "fmvj18x_cs: out of resource for serial\n");
|
||||
}
|
||||
ret = pcmcia_request_io(link->handle, &link->io);
|
||||
ret = pcmcia_request_io(link, &link->io);
|
||||
if (ret == CS_SUCCESS) return ret;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int ungermann_try_io_port(dev_link_t *link)
|
||||
static int ungermann_try_io_port(struct pcmcia_device *link)
|
||||
{
|
||||
int ret;
|
||||
kio_addr_t ioaddr;
|
||||
@ -330,7 +328,7 @@ static int ungermann_try_io_port(dev_link_t *link)
|
||||
*/
|
||||
for (ioaddr = 0x300; ioaddr < 0x3e0; ioaddr += 0x20) {
|
||||
link->io.BasePort1 = ioaddr;
|
||||
ret = pcmcia_request_io(link->handle, &link->io);
|
||||
ret = pcmcia_request_io(link, &link->io);
|
||||
if (ret == CS_SUCCESS) {
|
||||
/* calculate ConfigIndex value */
|
||||
link->conf.ConfigIndex =
|
||||
@ -341,9 +339,8 @@ static int ungermann_try_io_port(dev_link_t *link)
|
||||
return ret; /* RequestIO failed */
|
||||
}
|
||||
|
||||
static void fmvj18x_config(dev_link_t *link)
|
||||
static void fmvj18x_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
struct net_device *dev = link->priv;
|
||||
local_info_t *lp = netdev_priv(dev);
|
||||
tuple_t tuple;
|
||||
@ -362,12 +359,12 @@ static void fmvj18x_config(dev_link_t *link)
|
||||
registers.
|
||||
*/
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
tuple.TupleData = (u_char *)buf;
|
||||
tuple.TupleDataMax = 64;
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
|
||||
/* Configure card */
|
||||
link->state |= DEV_CONFIG;
|
||||
@ -377,16 +374,16 @@ static void fmvj18x_config(dev_link_t *link)
|
||||
|
||||
tuple.DesiredTuple = CISTPL_FUNCE;
|
||||
tuple.TupleOffset = 0;
|
||||
if (pcmcia_get_first_tuple(handle, &tuple) == CS_SUCCESS) {
|
||||
if (pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) {
|
||||
/* Yes, I have CISTPL_FUNCE. Let's check CISTPL_MANFID */
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigIndex = parse.cftable_entry.index;
|
||||
tuple.DesiredTuple = CISTPL_MANFID;
|
||||
if (pcmcia_get_first_tuple(handle, &tuple) == CS_SUCCESS)
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
if (pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS)
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
else
|
||||
buf[0] = 0xffff;
|
||||
switch (le16_to_cpu(buf[0])) {
|
||||
@ -420,8 +417,8 @@ static void fmvj18x_config(dev_link_t *link)
|
||||
} else {
|
||||
/* old type card */
|
||||
tuple.DesiredTuple = CISTPL_MANFID;
|
||||
if (pcmcia_get_first_tuple(handle, &tuple) == CS_SUCCESS)
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
if (pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS)
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
else
|
||||
buf[0] = 0xffff;
|
||||
switch (le16_to_cpu(buf[0])) {
|
||||
@ -452,10 +449,10 @@ static void fmvj18x_config(dev_link_t *link)
|
||||
ret = ungermann_try_io_port(link);
|
||||
if (ret != CS_SUCCESS) goto cs_failed;
|
||||
} else {
|
||||
CS_CHECK(RequestIO, pcmcia_request_io(link->handle, &link->io));
|
||||
CS_CHECK(RequestIO, pcmcia_request_io(link, &link->io));
|
||||
}
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link->handle, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link->handle, &link->conf));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
dev->irq = link->irq.AssignedIRQ;
|
||||
dev->base_addr = link->io.BasePort1;
|
||||
|
||||
@ -484,17 +481,17 @@ static void fmvj18x_config(dev_link_t *link)
|
||||
case CONTEC:
|
||||
tuple.DesiredTuple = CISTPL_FUNCE;
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
if (cardtype == MBH10304) {
|
||||
/* MBH10304's CIS_FUNCE is corrupted */
|
||||
node_id = &(tuple.TupleData[5]);
|
||||
card_name = "FMV-J182";
|
||||
} else {
|
||||
while (tuple.TupleData[0] != CISTPL_FUNCE_LAN_NODE_ID ) {
|
||||
CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
}
|
||||
node_id = &(tuple.TupleData[2]);
|
||||
if( cardtype == TDK ) {
|
||||
@ -538,7 +535,7 @@ static void fmvj18x_config(dev_link_t *link)
|
||||
lp->cardtype = cardtype;
|
||||
link->dev_node = &lp->node;
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(handle));
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(link));
|
||||
|
||||
if (register_netdev(dev) != 0) {
|
||||
printk(KERN_NOTICE "fmvj18x_cs: register_netdev() failed\n");
|
||||
@ -559,7 +556,7 @@ static void fmvj18x_config(dev_link_t *link)
|
||||
|
||||
cs_failed:
|
||||
/* All Card Services errors end up here */
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
failed:
|
||||
fmvj18x_release(link);
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
@ -567,7 +564,7 @@ failed:
|
||||
} /* fmvj18x_config */
|
||||
/*====================================================================*/
|
||||
|
||||
static int fmvj18x_get_hwinfo(dev_link_t *link, u_char *node_id)
|
||||
static int fmvj18x_get_hwinfo(struct pcmcia_device *link, u_char *node_id)
|
||||
{
|
||||
win_req_t req;
|
||||
memreq_t mem;
|
||||
@ -578,9 +575,9 @@ static int fmvj18x_get_hwinfo(dev_link_t *link, u_char *node_id)
|
||||
req.Attributes = WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_AM|WIN_ENABLE;
|
||||
req.Base = 0; req.Size = 0;
|
||||
req.AccessSpeed = 0;
|
||||
i = pcmcia_request_window(&link->handle, &req, &link->win);
|
||||
i = pcmcia_request_window(&link, &req, &link->win);
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestWindow, i);
|
||||
cs_error(link, RequestWindow, i);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -614,13 +611,13 @@ static int fmvj18x_get_hwinfo(dev_link_t *link, u_char *node_id)
|
||||
iounmap(base);
|
||||
j = pcmcia_release_window(link->win);
|
||||
if (j != CS_SUCCESS)
|
||||
cs_error(link->handle, ReleaseWindow, j);
|
||||
cs_error(link, ReleaseWindow, j);
|
||||
return (i != 0x200) ? 0 : -1;
|
||||
|
||||
} /* fmvj18x_get_hwinfo */
|
||||
/*====================================================================*/
|
||||
|
||||
static int fmvj18x_setup_mfc(dev_link_t *link)
|
||||
static int fmvj18x_setup_mfc(struct pcmcia_device *link)
|
||||
{
|
||||
win_req_t req;
|
||||
memreq_t mem;
|
||||
@ -633,9 +630,9 @@ static int fmvj18x_setup_mfc(dev_link_t *link)
|
||||
req.Attributes = WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_AM|WIN_ENABLE;
|
||||
req.Base = 0; req.Size = 0;
|
||||
req.AccessSpeed = 0;
|
||||
i = pcmcia_request_window(&link->handle, &req, &link->win);
|
||||
i = pcmcia_request_window(&link, &req, &link->win);
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestWindow, i);
|
||||
cs_error(link, RequestWindow, i);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -657,21 +654,20 @@ static int fmvj18x_setup_mfc(dev_link_t *link)
|
||||
iounmap(base);
|
||||
j = pcmcia_release_window(link->win);
|
||||
if (j != CS_SUCCESS)
|
||||
cs_error(link->handle, ReleaseWindow, j);
|
||||
cs_error(link, ReleaseWindow, j);
|
||||
return 0;
|
||||
|
||||
}
|
||||
/*====================================================================*/
|
||||
|
||||
static void fmvj18x_release(dev_link_t *link)
|
||||
static void fmvj18x_release(struct pcmcia_device *link)
|
||||
{
|
||||
DEBUG(0, "fmvj18x_release(0x%p)\n", link);
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
}
|
||||
|
||||
static int fmvj18x_suspend(struct pcmcia_device *p_dev)
|
||||
static int fmvj18x_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
if ((link->state & DEV_CONFIG) && (link->open))
|
||||
@ -680,9 +676,8 @@ static int fmvj18x_suspend(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int fmvj18x_resume(struct pcmcia_device *p_dev)
|
||||
static int fmvj18x_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
if ((link->state & DEV_CONFIG) && (link->open)) {
|
||||
@ -1122,7 +1117,7 @@ static int fjn_config(struct net_device *dev, struct ifmap *map){
|
||||
static int fjn_open(struct net_device *dev)
|
||||
{
|
||||
struct local_info_t *lp = netdev_priv(dev);
|
||||
dev_link_t *link = lp->p_dev;
|
||||
struct pcmcia_device *link = lp->p_dev;
|
||||
|
||||
DEBUG(4, "fjn_open('%s').\n", dev->name);
|
||||
|
||||
@ -1147,7 +1142,7 @@ static int fjn_open(struct net_device *dev)
|
||||
static int fjn_close(struct net_device *dev)
|
||||
{
|
||||
struct local_info_t *lp = netdev_priv(dev);
|
||||
dev_link_t *link = lp->p_dev;
|
||||
struct pcmcia_device *link = lp->p_dev;
|
||||
kio_addr_t ioaddr = dev->base_addr;
|
||||
|
||||
DEBUG(4, "fjn_close('%s').\n", dev->name);
|
||||
|
@ -105,9 +105,9 @@ MODULE_LICENSE("GPL");
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
static void ibmtr_config(dev_link_t *link);
|
||||
static void ibmtr_config(struct pcmcia_device *link);
|
||||
static void ibmtr_hw_setup(struct net_device *dev, u_int mmiobase);
|
||||
static void ibmtr_release(dev_link_t *link);
|
||||
static void ibmtr_release(struct pcmcia_device *link);
|
||||
static void ibmtr_detach(struct pcmcia_device *p_dev);
|
||||
|
||||
/*====================================================================*/
|
||||
@ -138,12 +138,11 @@ static struct ethtool_ops netdev_ethtool_ops = {
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static int ibmtr_attach(struct pcmcia_device *p_dev)
|
||||
static int ibmtr_attach(struct pcmcia_device *link)
|
||||
{
|
||||
ibmtr_dev_t *info;
|
||||
struct net_device *dev;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
|
||||
DEBUG(0, "ibmtr_attach()\n");
|
||||
|
||||
/* Create new token-ring device */
|
||||
@ -156,7 +155,7 @@ static int ibmtr_attach(struct pcmcia_device *p_dev)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
info->p_dev = p_dev;
|
||||
info->p_dev = link;
|
||||
link->priv = info;
|
||||
info->ti = netdev_priv(dev);
|
||||
|
||||
@ -189,9 +188,8 @@ static int ibmtr_attach(struct pcmcia_device *p_dev)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void ibmtr_detach(struct pcmcia_device *p_dev)
|
||||
static void ibmtr_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct ibmtr_dev_t *info = link->priv;
|
||||
struct net_device *dev = info->dev;
|
||||
|
||||
@ -222,9 +220,8 @@ static void ibmtr_detach(struct pcmcia_device *p_dev)
|
||||
#define CS_CHECK(fn, ret) \
|
||||
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
|
||||
static void ibmtr_config(dev_link_t *link)
|
||||
static void ibmtr_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
ibmtr_dev_t *info = link->priv;
|
||||
struct net_device *dev = info->dev;
|
||||
struct tok_info *ti = netdev_priv(dev);
|
||||
@ -242,9 +239,9 @@ static void ibmtr_config(dev_link_t *link)
|
||||
tuple.TupleDataMax = 64;
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
|
||||
/* Configure card */
|
||||
@ -256,15 +253,15 @@ static void ibmtr_config(dev_link_t *link)
|
||||
|
||||
/* Try PRIMARY card at 0xA20-0xA23 */
|
||||
link->io.BasePort1 = 0xA20;
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i != CS_SUCCESS) {
|
||||
/* Couldn't get 0xA20-0xA23. Try ALTERNATE at 0xA24-0xA27. */
|
||||
link->io.BasePort1 = 0xA24;
|
||||
CS_CHECK(RequestIO, pcmcia_request_io(link->handle, &link->io));
|
||||
CS_CHECK(RequestIO, pcmcia_request_io(link, &link->io));
|
||||
}
|
||||
dev->base_addr = link->io.BasePort1;
|
||||
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link->handle, &link->irq));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
dev->irq = link->irq.AssignedIRQ;
|
||||
ti->irq = link->irq.AssignedIRQ;
|
||||
ti->global_int_enable=GLOBAL_INT_ENABLE+((dev->irq==9) ? 2 : dev->irq);
|
||||
@ -275,7 +272,7 @@ static void ibmtr_config(dev_link_t *link)
|
||||
req.Base = 0;
|
||||
req.Size = 0x2000;
|
||||
req.AccessSpeed = 250;
|
||||
CS_CHECK(RequestWindow, pcmcia_request_window(&link->handle, &req, &link->win));
|
||||
CS_CHECK(RequestWindow, pcmcia_request_window(&link, &req, &link->win));
|
||||
|
||||
mem.CardOffset = mmiobase;
|
||||
mem.Page = 0;
|
||||
@ -288,7 +285,7 @@ static void ibmtr_config(dev_link_t *link)
|
||||
req.Base = 0;
|
||||
req.Size = sramsize * 1024;
|
||||
req.AccessSpeed = 250;
|
||||
CS_CHECK(RequestWindow, pcmcia_request_window(&link->handle, &req, &info->sram_win_handle));
|
||||
CS_CHECK(RequestWindow, pcmcia_request_window(&link, &req, &info->sram_win_handle));
|
||||
|
||||
mem.CardOffset = srambase;
|
||||
mem.Page = 0;
|
||||
@ -298,7 +295,7 @@ static void ibmtr_config(dev_link_t *link)
|
||||
ti->sram_virt = ioremap(req.Base, req.Size);
|
||||
ti->sram_phys = req.Base;
|
||||
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link->handle, &link->conf));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
|
||||
/* Set up the Token-Ring Controller Configuration Register and
|
||||
turn on the card. Check the "Local Area Network Credit Card
|
||||
@ -307,7 +304,7 @@ static void ibmtr_config(dev_link_t *link)
|
||||
|
||||
link->dev_node = &info->node;
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(handle));
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(link));
|
||||
|
||||
i = ibmtr_probe_card(dev);
|
||||
if (i != 0) {
|
||||
@ -329,7 +326,7 @@ static void ibmtr_config(dev_link_t *link)
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
failed:
|
||||
ibmtr_release(link);
|
||||
} /* ibmtr_config */
|
||||
@ -342,7 +339,7 @@ failed:
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void ibmtr_release(dev_link_t *link)
|
||||
static void ibmtr_release(struct pcmcia_device *link)
|
||||
{
|
||||
ibmtr_dev_t *info = link->priv;
|
||||
struct net_device *dev = info->dev;
|
||||
@ -354,12 +351,11 @@ static void ibmtr_release(dev_link_t *link)
|
||||
iounmap(ti->mmio);
|
||||
pcmcia_release_window(info->sram_win_handle);
|
||||
}
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
}
|
||||
|
||||
static int ibmtr_suspend(struct pcmcia_device *p_dev)
|
||||
static int ibmtr_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
ibmtr_dev_t *info = link->priv;
|
||||
struct net_device *dev = info->dev;
|
||||
|
||||
@ -369,9 +365,8 @@ static int ibmtr_suspend(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ibmtr_resume(struct pcmcia_device *p_dev)
|
||||
static int ibmtr_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
ibmtr_dev_t *info = link->priv;
|
||||
struct net_device *dev = info->dev;
|
||||
|
||||
|
@ -417,8 +417,8 @@ INT_MODULE_PARM(pc_debug, PCMCIA_DEBUG);
|
||||
Function Prototypes
|
||||
---------------------------------------------------------------------------- */
|
||||
|
||||
static void nmclan_config(dev_link_t *link);
|
||||
static void nmclan_release(dev_link_t *link);
|
||||
static void nmclan_config(struct pcmcia_device *link);
|
||||
static void nmclan_release(struct pcmcia_device *link);
|
||||
|
||||
static void nmclan_reset(struct net_device *dev);
|
||||
static int mace_config(struct net_device *dev, struct ifmap *map);
|
||||
@ -443,11 +443,10 @@ nmclan_attach
|
||||
Services.
|
||||
---------------------------------------------------------------------------- */
|
||||
|
||||
static int nmclan_attach(struct pcmcia_device *p_dev)
|
||||
static int nmclan_attach(struct pcmcia_device *link)
|
||||
{
|
||||
mace_private *lp;
|
||||
struct net_device *dev;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "nmclan_attach()\n");
|
||||
DEBUG(1, "%s\n", rcsid);
|
||||
@ -457,7 +456,7 @@ static int nmclan_attach(struct pcmcia_device *p_dev)
|
||||
if (!dev)
|
||||
return -ENOMEM;
|
||||
lp = netdev_priv(dev);
|
||||
lp->p_dev = p_dev;
|
||||
lp->p_dev = link;
|
||||
link->priv = dev;
|
||||
|
||||
spin_lock_init(&lp->bank_lock);
|
||||
@ -502,9 +501,8 @@ nmclan_detach
|
||||
when the device is released.
|
||||
---------------------------------------------------------------------------- */
|
||||
|
||||
static void nmclan_detach(struct pcmcia_device *p_dev)
|
||||
static void nmclan_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
DEBUG(0, "nmclan_detach(0x%p)\n", link);
|
||||
@ -657,9 +655,8 @@ nmclan_config
|
||||
#define CS_CHECK(fn, ret) \
|
||||
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
|
||||
static void nmclan_config(dev_link_t *link)
|
||||
static void nmclan_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
struct net_device *dev = link->priv;
|
||||
mace_private *lp = netdev_priv(dev);
|
||||
tuple_t tuple;
|
||||
@ -675,17 +672,17 @@ static void nmclan_config(dev_link_t *link)
|
||||
tuple.TupleDataMax = 64;
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
|
||||
/* Configure card */
|
||||
link->state |= DEV_CONFIG;
|
||||
|
||||
CS_CHECK(RequestIO, pcmcia_request_io(handle, &link->io));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(handle, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(handle, &link->conf));
|
||||
CS_CHECK(RequestIO, pcmcia_request_io(link, &link->io));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
dev->irq = link->irq.AssignedIRQ;
|
||||
dev->base_addr = link->io.BasePort1;
|
||||
|
||||
@ -696,8 +693,8 @@ static void nmclan_config(dev_link_t *link)
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = 64;
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
memcpy(dev->dev_addr, tuple.TupleData, ETHER_ADDR_LEN);
|
||||
|
||||
/* Verify configuration by reading the MACE ID. */
|
||||
@ -728,7 +725,7 @@ static void nmclan_config(dev_link_t *link)
|
||||
|
||||
link->dev_node = &lp->node;
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(handle));
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(link));
|
||||
|
||||
i = register_netdev(dev);
|
||||
if (i != 0) {
|
||||
@ -746,7 +743,7 @@ static void nmclan_config(dev_link_t *link)
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
failed:
|
||||
nmclan_release(link);
|
||||
return;
|
||||
@ -759,15 +756,14 @@ nmclan_release
|
||||
net device, and release the PCMCIA configuration. If the device
|
||||
is still open, this will be postponed until it is closed.
|
||||
---------------------------------------------------------------------------- */
|
||||
static void nmclan_release(dev_link_t *link)
|
||||
static void nmclan_release(struct pcmcia_device *link)
|
||||
{
|
||||
DEBUG(0, "nmclan_release(0x%p)\n", link);
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
}
|
||||
|
||||
static int nmclan_suspend(struct pcmcia_device *p_dev)
|
||||
static int nmclan_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
if ((link->state & DEV_CONFIG) && (link->open))
|
||||
@ -776,9 +772,8 @@ static int nmclan_suspend(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int nmclan_resume(struct pcmcia_device *p_dev)
|
||||
static int nmclan_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
if ((link->state & DEV_CONFIG) && (link->open)) {
|
||||
@ -799,7 +794,7 @@ static void nmclan_reset(struct net_device *dev)
|
||||
mace_private *lp = netdev_priv(dev);
|
||||
|
||||
#if RESET_XILINX
|
||||
dev_link_t *link = &lp->link;
|
||||
struct pcmcia_device *link = &lp->link;
|
||||
conf_reg_t reg;
|
||||
u_long OrigCorValue;
|
||||
|
||||
@ -808,7 +803,7 @@ static void nmclan_reset(struct net_device *dev)
|
||||
reg.Action = CS_READ;
|
||||
reg.Offset = CISREG_COR;
|
||||
reg.Value = 0;
|
||||
pcmcia_access_configuration_register(link->handle, ®);
|
||||
pcmcia_access_configuration_register(link, ®);
|
||||
OrigCorValue = reg.Value;
|
||||
|
||||
/* Reset Xilinx */
|
||||
@ -817,12 +812,12 @@ static void nmclan_reset(struct net_device *dev)
|
||||
DEBUG(1, "nmclan_reset: OrigCorValue=0x%lX, resetting...\n",
|
||||
OrigCorValue);
|
||||
reg.Value = COR_SOFT_RESET;
|
||||
pcmcia_access_configuration_register(link->handle, ®);
|
||||
pcmcia_access_configuration_register(link, ®);
|
||||
/* Need to wait for 20 ms for PCMCIA to finish reset. */
|
||||
|
||||
/* Restore original COR configuration index */
|
||||
reg.Value = COR_LEVEL_REQ | (OrigCorValue & COR_CONFIG_MASK);
|
||||
pcmcia_access_configuration_register(link->handle, ®);
|
||||
pcmcia_access_configuration_register(link, ®);
|
||||
/* Xilinx is now completely reset along with the MACE chip. */
|
||||
lp->tx_free_frames=AM2150_MAX_TX_FRAMES;
|
||||
|
||||
@ -866,7 +861,7 @@ static int mace_open(struct net_device *dev)
|
||||
{
|
||||
kio_addr_t ioaddr = dev->base_addr;
|
||||
mace_private *lp = netdev_priv(dev);
|
||||
dev_link_t *link = lp->p_dev;
|
||||
struct pcmcia_device *link = lp->p_dev;
|
||||
|
||||
if (!DEV_OK(link))
|
||||
return -ENODEV;
|
||||
@ -889,7 +884,7 @@ static int mace_close(struct net_device *dev)
|
||||
{
|
||||
kio_addr_t ioaddr = dev->base_addr;
|
||||
mace_private *lp = netdev_priv(dev);
|
||||
dev_link_t *link = lp->p_dev;
|
||||
struct pcmcia_device *link = lp->p_dev;
|
||||
|
||||
DEBUG(2, "%s: shutting down ethercard.\n", dev->name);
|
||||
|
||||
@ -944,12 +939,12 @@ mace_start_xmit
|
||||
static void mace_tx_timeout(struct net_device *dev)
|
||||
{
|
||||
mace_private *lp = netdev_priv(dev);
|
||||
dev_link_t *link = lp->p_dev;
|
||||
struct pcmcia_device *link = lp->p_dev;
|
||||
|
||||
printk(KERN_NOTICE "%s: transmit timed out -- ", dev->name);
|
||||
#if RESET_ON_TIMEOUT
|
||||
printk("resetting card\n");
|
||||
pcmcia_reset_card(link->handle, NULL);
|
||||
pcmcia_reset_card(link, NULL);
|
||||
#else /* #if RESET_ON_TIMEOUT */
|
||||
printk("NOT resetting card\n");
|
||||
#endif /* #if RESET_ON_TIMEOUT */
|
||||
|
@ -103,8 +103,8 @@ module_param_array(hw_addr, int, NULL, 0);
|
||||
/*====================================================================*/
|
||||
|
||||
static void mii_phy_probe(struct net_device *dev);
|
||||
static void pcnet_config(dev_link_t *link);
|
||||
static void pcnet_release(dev_link_t *link);
|
||||
static void pcnet_config(struct pcmcia_device *link);
|
||||
static void pcnet_release(struct pcmcia_device *link);
|
||||
static int pcnet_open(struct net_device *dev);
|
||||
static int pcnet_close(struct net_device *dev);
|
||||
static int ei_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
|
||||
@ -113,9 +113,9 @@ static irqreturn_t ei_irq_wrapper(int irq, void *dev_id, struct pt_regs *regs);
|
||||
static void ei_watchdog(u_long arg);
|
||||
static void pcnet_reset_8390(struct net_device *dev);
|
||||
static int set_config(struct net_device *dev, struct ifmap *map);
|
||||
static int setup_shmem_window(dev_link_t *link, int start_pg,
|
||||
static int setup_shmem_window(struct pcmcia_device *link, int start_pg,
|
||||
int stop_pg, int cm_offset);
|
||||
static int setup_dma_config(dev_link_t *link, int start_pg,
|
||||
static int setup_dma_config(struct pcmcia_device *link, int start_pg,
|
||||
int stop_pg);
|
||||
|
||||
static void pcnet_detach(struct pcmcia_device *p_dev);
|
||||
@ -240,11 +240,10 @@ static inline pcnet_dev_t *PRIV(struct net_device *dev)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static int pcnet_probe(struct pcmcia_device *p_dev)
|
||||
static int pcnet_probe(struct pcmcia_device *link)
|
||||
{
|
||||
pcnet_dev_t *info;
|
||||
struct net_device *dev;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "pcnet_attach()\n");
|
||||
|
||||
@ -252,7 +251,7 @@ static int pcnet_probe(struct pcmcia_device *p_dev)
|
||||
dev = __alloc_ei_netdev(sizeof(pcnet_dev_t));
|
||||
if (!dev) return -ENOMEM;
|
||||
info = PRIV(dev);
|
||||
info->p_dev = p_dev;
|
||||
info->p_dev = link;
|
||||
link->priv = dev;
|
||||
|
||||
link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
|
||||
@ -280,9 +279,8 @@ static int pcnet_probe(struct pcmcia_device *p_dev)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void pcnet_detach(struct pcmcia_device *p_dev)
|
||||
static void pcnet_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
DEBUG(0, "pcnet_detach(0x%p)\n", link);
|
||||
@ -303,7 +301,7 @@ static void pcnet_detach(struct pcmcia_device *p_dev)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static hw_info_t *get_hwinfo(dev_link_t *link)
|
||||
static hw_info_t *get_hwinfo(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev = link->priv;
|
||||
win_req_t req;
|
||||
@ -315,9 +313,9 @@ static hw_info_t *get_hwinfo(dev_link_t *link)
|
||||
req.Attributes = WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_AM|WIN_ENABLE;
|
||||
req.Base = 0; req.Size = 0;
|
||||
req.AccessSpeed = 0;
|
||||
i = pcmcia_request_window(&link->handle, &req, &link->win);
|
||||
i = pcmcia_request_window(&link, &req, &link->win);
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestWindow, i);
|
||||
cs_error(link, RequestWindow, i);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -340,7 +338,7 @@ static hw_info_t *get_hwinfo(dev_link_t *link)
|
||||
iounmap(virt);
|
||||
j = pcmcia_release_window(link->win);
|
||||
if (j != CS_SUCCESS)
|
||||
cs_error(link->handle, ReleaseWindow, j);
|
||||
cs_error(link, ReleaseWindow, j);
|
||||
return (i < NR_INFO) ? hw_info+i : NULL;
|
||||
} /* get_hwinfo */
|
||||
|
||||
@ -352,7 +350,7 @@ static hw_info_t *get_hwinfo(dev_link_t *link)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static hw_info_t *get_prom(dev_link_t *link)
|
||||
static hw_info_t *get_prom(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev = link->priv;
|
||||
kio_addr_t ioaddr = dev->base_addr;
|
||||
@ -406,7 +404,7 @@ static hw_info_t *get_prom(dev_link_t *link)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static hw_info_t *get_dl10019(dev_link_t *link)
|
||||
static hw_info_t *get_dl10019(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev = link->priv;
|
||||
int i;
|
||||
@ -428,7 +426,7 @@ static hw_info_t *get_dl10019(dev_link_t *link)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static hw_info_t *get_ax88190(dev_link_t *link)
|
||||
static hw_info_t *get_ax88190(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev = link->priv;
|
||||
kio_addr_t ioaddr = dev->base_addr;
|
||||
@ -461,7 +459,7 @@ static hw_info_t *get_ax88190(dev_link_t *link)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static hw_info_t *get_hwired(dev_link_t *link)
|
||||
static hw_info_t *get_hwired(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev = link->priv;
|
||||
int i;
|
||||
@ -488,7 +486,7 @@ static hw_info_t *get_hwired(dev_link_t *link)
|
||||
#define CS_CHECK(fn, ret) \
|
||||
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
|
||||
static int try_io_port(dev_link_t *link)
|
||||
static int try_io_port(struct pcmcia_device *link)
|
||||
{
|
||||
int j, ret;
|
||||
if (link->io.NumPorts1 == 32) {
|
||||
@ -509,18 +507,17 @@ static int try_io_port(dev_link_t *link)
|
||||
for (j = 0; j < 0x400; j += 0x20) {
|
||||
link->io.BasePort1 = j ^ 0x300;
|
||||
link->io.BasePort2 = (j ^ 0x300) + 0x10;
|
||||
ret = pcmcia_request_io(link->handle, &link->io);
|
||||
ret = pcmcia_request_io(link, &link->io);
|
||||
if (ret == CS_SUCCESS) return ret;
|
||||
}
|
||||
return ret;
|
||||
} else {
|
||||
return pcmcia_request_io(link->handle, &link->io);
|
||||
return pcmcia_request_io(link, &link->io);
|
||||
}
|
||||
}
|
||||
|
||||
static void pcnet_config(dev_link_t *link)
|
||||
static void pcnet_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
struct net_device *dev = link->priv;
|
||||
pcnet_dev_t *info = PRIV(dev);
|
||||
tuple_t tuple;
|
||||
@ -537,9 +534,9 @@ static void pcnet_config(dev_link_t *link)
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
@ -548,21 +545,21 @@ static void pcnet_config(dev_link_t *link)
|
||||
|
||||
tuple.DesiredTuple = CISTPL_MANFID;
|
||||
tuple.Attributes = TUPLE_RETURN_COMMON;
|
||||
if ((pcmcia_get_first_tuple(handle, &tuple) == CS_SUCCESS) &&
|
||||
(pcmcia_get_tuple_data(handle, &tuple) == CS_SUCCESS)) {
|
||||
if ((pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) &&
|
||||
(pcmcia_get_tuple_data(link, &tuple) == CS_SUCCESS)) {
|
||||
manfid = le16_to_cpu(buf[0]);
|
||||
prodid = le16_to_cpu(buf[1]);
|
||||
}
|
||||
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
tuple.Attributes = 0;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
while (last_ret == CS_SUCCESS) {
|
||||
cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
|
||||
cistpl_io_t *io = &(parse.cftable_entry.io);
|
||||
|
||||
if (pcmcia_get_tuple_data(handle, &tuple) != 0 ||
|
||||
pcmcia_parse_tuple(handle, &tuple, &parse) != 0 ||
|
||||
if (pcmcia_get_tuple_data(link, &tuple) != 0 ||
|
||||
pcmcia_parse_tuple(link, &tuple, &parse) != 0 ||
|
||||
cfg->index == 0 || cfg->io.nwin == 0)
|
||||
goto next_entry;
|
||||
|
||||
@ -586,14 +583,14 @@ static void pcnet_config(dev_link_t *link)
|
||||
if (last_ret == CS_SUCCESS) break;
|
||||
}
|
||||
next_entry:
|
||||
last_ret = pcmcia_get_next_tuple(handle, &tuple);
|
||||
last_ret = pcmcia_get_next_tuple(link, &tuple);
|
||||
}
|
||||
if (last_ret != CS_SUCCESS) {
|
||||
cs_error(handle, RequestIO, last_ret);
|
||||
cs_error(link, RequestIO, last_ret);
|
||||
goto failed;
|
||||
}
|
||||
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(handle, &link->irq));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
|
||||
if (link->io.NumPorts2 == 8) {
|
||||
link->conf.Attributes |= CONF_ENABLE_SPKR;
|
||||
@ -603,7 +600,7 @@ static void pcnet_config(dev_link_t *link)
|
||||
(prodid == PRODID_IBM_HOME_AND_AWAY))
|
||||
link->conf.ConfigIndex |= 0x10;
|
||||
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(handle, &link->conf));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
dev->irq = link->irq.AssignedIRQ;
|
||||
dev->base_addr = link->io.BasePort1;
|
||||
if (info->flags & HAS_MISC_REG) {
|
||||
@ -673,7 +670,7 @@ static void pcnet_config(dev_link_t *link)
|
||||
|
||||
link->dev_node = &info->node;
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(handle));
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(link));
|
||||
|
||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
dev->poll_controller = ei_poll;
|
||||
@ -707,7 +704,7 @@ static void pcnet_config(dev_link_t *link)
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
failed:
|
||||
pcnet_release(link);
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
@ -722,7 +719,7 @@ failed:
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void pcnet_release(dev_link_t *link)
|
||||
static void pcnet_release(struct pcmcia_device *link)
|
||||
{
|
||||
pcnet_dev_t *info = PRIV(link->priv);
|
||||
|
||||
@ -731,7 +728,7 @@ static void pcnet_release(dev_link_t *link)
|
||||
if (info->flags & USE_SHMEM)
|
||||
iounmap(info->base);
|
||||
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
}
|
||||
|
||||
/*======================================================================
|
||||
@ -743,9 +740,8 @@ static void pcnet_release(dev_link_t *link)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static int pcnet_suspend(struct pcmcia_device *p_dev)
|
||||
static int pcnet_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
if ((link->state & DEV_CONFIG) && (link->open))
|
||||
@ -754,9 +750,8 @@ static int pcnet_suspend(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int pcnet_resume(struct pcmcia_device *p_dev)
|
||||
static int pcnet_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
if ((link->state & DEV_CONFIG) && (link->open)) {
|
||||
@ -1002,7 +997,7 @@ static void mii_phy_probe(struct net_device *dev)
|
||||
static int pcnet_open(struct net_device *dev)
|
||||
{
|
||||
pcnet_dev_t *info = PRIV(dev);
|
||||
dev_link_t *link = info->p_dev;
|
||||
struct pcmcia_device *link = info->p_dev;
|
||||
|
||||
DEBUG(2, "pcnet_open('%s')\n", dev->name);
|
||||
|
||||
@ -1030,7 +1025,7 @@ static int pcnet_open(struct net_device *dev)
|
||||
static int pcnet_close(struct net_device *dev)
|
||||
{
|
||||
pcnet_dev_t *info = PRIV(dev);
|
||||
dev_link_t *link = info->p_dev;
|
||||
struct pcmcia_device *link = info->p_dev;
|
||||
|
||||
DEBUG(2, "pcnet_close('%s')\n", dev->name);
|
||||
|
||||
@ -1408,7 +1403,7 @@ static void dma_block_output(struct net_device *dev, int count,
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
static int setup_dma_config(dev_link_t *link, int start_pg,
|
||||
static int setup_dma_config(struct pcmcia_device *link, int start_pg,
|
||||
int stop_pg)
|
||||
{
|
||||
struct net_device *dev = link->priv;
|
||||
@ -1511,7 +1506,7 @@ static void shmem_block_output(struct net_device *dev, int count,
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
static int setup_shmem_window(dev_link_t *link, int start_pg,
|
||||
static int setup_shmem_window(struct pcmcia_device *link, int start_pg,
|
||||
int stop_pg, int cm_offset)
|
||||
{
|
||||
struct net_device *dev = link->priv;
|
||||
@ -1533,7 +1528,7 @@ static int setup_shmem_window(dev_link_t *link, int start_pg,
|
||||
req.Attributes |= WIN_USE_WAIT;
|
||||
req.Base = 0; req.Size = window_size;
|
||||
req.AccessSpeed = mem_speed;
|
||||
CS_CHECK(RequestWindow, pcmcia_request_window(&link->handle, &req, &link->win));
|
||||
CS_CHECK(RequestWindow, pcmcia_request_window(&link, &req, &link->win));
|
||||
|
||||
mem.CardOffset = (start_pg << 8) + cm_offset;
|
||||
offset = mem.CardOffset % window_size;
|
||||
@ -1574,7 +1569,7 @@ static int setup_shmem_window(dev_link_t *link, int start_pg,
|
||||
return 0;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
failed:
|
||||
return 1;
|
||||
}
|
||||
|
@ -279,8 +279,8 @@ enum RxCfg { RxAllMulti = 0x0004, RxPromisc = 0x0002,
|
||||
/*====================================================================*/
|
||||
|
||||
static void smc91c92_detach(struct pcmcia_device *p_dev);
|
||||
static void smc91c92_config(dev_link_t *link);
|
||||
static void smc91c92_release(dev_link_t *link);
|
||||
static void smc91c92_config(struct pcmcia_device *link);
|
||||
static void smc91c92_release(struct pcmcia_device *link);
|
||||
|
||||
static int smc_open(struct net_device *dev);
|
||||
static int smc_close(struct net_device *dev);
|
||||
@ -309,11 +309,10 @@ static struct ethtool_ops ethtool_ops;
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static int smc91c92_attach(struct pcmcia_device *p_dev)
|
||||
static int smc91c92_attach(struct pcmcia_device *link)
|
||||
{
|
||||
struct smc_private *smc;
|
||||
struct net_device *dev;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "smc91c92_attach()\n");
|
||||
|
||||
@ -322,7 +321,7 @@ static int smc91c92_attach(struct pcmcia_device *p_dev)
|
||||
if (!dev)
|
||||
return -ENOMEM;
|
||||
smc = netdev_priv(dev);
|
||||
smc->p_dev = p_dev;
|
||||
smc->p_dev = link;
|
||||
link->priv = dev;
|
||||
|
||||
spin_lock_init(&smc->lock);
|
||||
@ -372,9 +371,8 @@ static int smc91c92_attach(struct pcmcia_device *p_dev)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void smc91c92_detach(struct pcmcia_device *p_dev)
|
||||
static void smc91c92_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
DEBUG(0, "smc91c92_detach(0x%p)\n", link);
|
||||
@ -411,7 +409,7 @@ static int cvt_ascii_address(struct net_device *dev, char *s)
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
static int first_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
static int first_tuple(struct pcmcia_device *handle, tuple_t *tuple,
|
||||
cisparse_t *parse)
|
||||
{
|
||||
int i;
|
||||
@ -422,7 +420,7 @@ static int first_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
return pcmcia_parse_tuple(handle, tuple, parse);
|
||||
}
|
||||
|
||||
static int next_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
static int next_tuple(struct pcmcia_device *handle, tuple_t *tuple,
|
||||
cisparse_t *parse)
|
||||
{
|
||||
int i;
|
||||
@ -444,7 +442,7 @@ static int next_tuple(client_handle_t handle, tuple_t *tuple,
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static int mhz_3288_power(dev_link_t *link)
|
||||
static int mhz_3288_power(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev = link->priv;
|
||||
struct smc_private *smc = netdev_priv(dev);
|
||||
@ -466,7 +464,7 @@ static int mhz_3288_power(dev_link_t *link)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mhz_mfc_config(dev_link_t *link)
|
||||
static int mhz_mfc_config(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev = link->priv;
|
||||
struct smc_private *smc = netdev_priv(dev);
|
||||
@ -501,7 +499,7 @@ static int mhz_mfc_config(dev_link_t *link)
|
||||
tuple->TupleDataMax = 255;
|
||||
tuple->DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
|
||||
i = first_tuple(link->handle, tuple, parse);
|
||||
i = first_tuple(link, tuple, parse);
|
||||
/* The Megahertz combo cards have modem-like CIS entries, so
|
||||
we have to explicitly try a bunch of port combinations. */
|
||||
while (i == CS_SUCCESS) {
|
||||
@ -510,11 +508,11 @@ static int mhz_mfc_config(dev_link_t *link)
|
||||
for (k = 0; k < 0x400; k += 0x10) {
|
||||
if (k & 0x80) continue;
|
||||
link->io.BasePort1 = k ^ 0x300;
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS) break;
|
||||
}
|
||||
if (i == CS_SUCCESS) break;
|
||||
i = next_tuple(link->handle, tuple, parse);
|
||||
i = next_tuple(link, tuple, parse);
|
||||
}
|
||||
if (i != CS_SUCCESS)
|
||||
goto free_cfg_mem;
|
||||
@ -524,7 +522,7 @@ static int mhz_mfc_config(dev_link_t *link)
|
||||
req.Attributes = WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_AM|WIN_ENABLE;
|
||||
req.Base = req.Size = 0;
|
||||
req.AccessSpeed = 0;
|
||||
i = pcmcia_request_window(&link->handle, &req, &link->win);
|
||||
i = pcmcia_request_window(&link, &req, &link->win);
|
||||
if (i != CS_SUCCESS)
|
||||
goto free_cfg_mem;
|
||||
smc->base = ioremap(req.Base, req.Size);
|
||||
@ -543,9 +541,8 @@ free_cfg_mem:
|
||||
return i;
|
||||
}
|
||||
|
||||
static int mhz_setup(dev_link_t *link)
|
||||
static int mhz_setup(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
struct net_device *dev = link->priv;
|
||||
struct smc_cfg_mem *cfg_mem;
|
||||
tuple_t *tuple;
|
||||
@ -568,13 +565,13 @@ static int mhz_setup(dev_link_t *link)
|
||||
/* Read the station address from the CIS. It is stored as the last
|
||||
(fourth) string in the Version 1 Version/ID tuple. */
|
||||
tuple->DesiredTuple = CISTPL_VERS_1;
|
||||
if (first_tuple(handle, tuple, parse) != CS_SUCCESS) {
|
||||
if (first_tuple(link, tuple, parse) != CS_SUCCESS) {
|
||||
rc = -1;
|
||||
goto free_cfg_mem;
|
||||
}
|
||||
/* Ugh -- the EM1144 card has two VERS_1 tuples!?! */
|
||||
if (next_tuple(handle, tuple, parse) != CS_SUCCESS)
|
||||
first_tuple(handle, tuple, parse);
|
||||
if (next_tuple(link, tuple, parse) != CS_SUCCESS)
|
||||
first_tuple(link, tuple, parse);
|
||||
if (parse->version_1.ns > 3) {
|
||||
station_addr = parse->version_1.str + parse->version_1.ofs[3];
|
||||
if (cvt_ascii_address(dev, station_addr) == 0) {
|
||||
@ -585,11 +582,11 @@ static int mhz_setup(dev_link_t *link)
|
||||
|
||||
/* Another possibility: for the EM3288, in a special tuple */
|
||||
tuple->DesiredTuple = 0x81;
|
||||
if (pcmcia_get_first_tuple(handle, tuple) != CS_SUCCESS) {
|
||||
if (pcmcia_get_first_tuple(link, tuple) != CS_SUCCESS) {
|
||||
rc = -1;
|
||||
goto free_cfg_mem;
|
||||
}
|
||||
if (pcmcia_get_tuple_data(handle, tuple) != CS_SUCCESS) {
|
||||
if (pcmcia_get_tuple_data(link, tuple) != CS_SUCCESS) {
|
||||
rc = -1;
|
||||
goto free_cfg_mem;
|
||||
}
|
||||
@ -613,7 +610,7 @@ free_cfg_mem:
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void mot_config(dev_link_t *link)
|
||||
static void mot_config(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev = link->priv;
|
||||
struct smc_private *smc = netdev_priv(dev);
|
||||
@ -634,7 +631,7 @@ static void mot_config(dev_link_t *link)
|
||||
mdelay(100);
|
||||
}
|
||||
|
||||
static int mot_setup(dev_link_t *link)
|
||||
static int mot_setup(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev = link->priv;
|
||||
kio_addr_t ioaddr = dev->base_addr;
|
||||
@ -668,7 +665,7 @@ static int mot_setup(dev_link_t *link)
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
static int smc_config(dev_link_t *link)
|
||||
static int smc_config(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev = link->priv;
|
||||
struct smc_cfg_mem *cfg_mem;
|
||||
@ -693,16 +690,16 @@ static int smc_config(dev_link_t *link)
|
||||
tuple->DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
|
||||
link->io.NumPorts1 = 16;
|
||||
i = first_tuple(link->handle, tuple, parse);
|
||||
i = first_tuple(link, tuple, parse);
|
||||
while (i != CS_NO_MORE_ITEMS) {
|
||||
if (i == CS_SUCCESS) {
|
||||
link->conf.ConfigIndex = cf->index;
|
||||
link->io.BasePort1 = cf->io.win[0].base;
|
||||
link->io.IOAddrLines = cf->io.flags & CISTPL_IO_LINES_MASK;
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS) break;
|
||||
}
|
||||
i = next_tuple(link->handle, tuple, parse);
|
||||
i = next_tuple(link, tuple, parse);
|
||||
}
|
||||
if (i == CS_SUCCESS)
|
||||
dev->base_addr = link->io.BasePort1;
|
||||
@ -711,9 +708,8 @@ static int smc_config(dev_link_t *link)
|
||||
return i;
|
||||
}
|
||||
|
||||
static int smc_setup(dev_link_t *link)
|
||||
static int smc_setup(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
struct net_device *dev = link->priv;
|
||||
struct smc_cfg_mem *cfg_mem;
|
||||
tuple_t *tuple;
|
||||
@ -736,11 +732,11 @@ static int smc_setup(dev_link_t *link)
|
||||
|
||||
/* Check for a LAN function extension tuple */
|
||||
tuple->DesiredTuple = CISTPL_FUNCE;
|
||||
i = first_tuple(handle, tuple, parse);
|
||||
i = first_tuple(link, tuple, parse);
|
||||
while (i == CS_SUCCESS) {
|
||||
if (parse->funce.type == CISTPL_FUNCE_LAN_NODE_ID)
|
||||
break;
|
||||
i = next_tuple(handle, tuple, parse);
|
||||
i = next_tuple(link, tuple, parse);
|
||||
}
|
||||
if (i == CS_SUCCESS) {
|
||||
node_id = (cistpl_lan_node_id_t *)parse->funce.data;
|
||||
@ -753,7 +749,7 @@ static int smc_setup(dev_link_t *link)
|
||||
}
|
||||
/* Try the third string in the Version 1 Version/ID tuple. */
|
||||
tuple->DesiredTuple = CISTPL_VERS_1;
|
||||
if (first_tuple(handle, tuple, parse) != CS_SUCCESS) {
|
||||
if (first_tuple(link, tuple, parse) != CS_SUCCESS) {
|
||||
rc = -1;
|
||||
goto free_cfg_mem;
|
||||
}
|
||||
@ -771,7 +767,7 @@ free_cfg_mem:
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
static int osi_config(dev_link_t *link)
|
||||
static int osi_config(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev = link->priv;
|
||||
static const kio_addr_t com[4] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8 };
|
||||
@ -791,22 +787,21 @@ static int osi_config(dev_link_t *link)
|
||||
|
||||
for (i = j = 0; j < 4; j++) {
|
||||
link->io.BasePort2 = com[j];
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS) break;
|
||||
}
|
||||
if (i != CS_SUCCESS) {
|
||||
/* Fallback: turn off hard decode */
|
||||
link->conf.ConfigIndex = 0x03;
|
||||
link->io.NumPorts2 = 0;
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
}
|
||||
dev->base_addr = link->io.BasePort1 + 0x10;
|
||||
return i;
|
||||
}
|
||||
|
||||
static int osi_setup(dev_link_t *link, u_short manfid, u_short cardid)
|
||||
static int osi_setup(struct pcmcia_device *link, u_short manfid, u_short cardid)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
struct net_device *dev = link->priv;
|
||||
struct smc_cfg_mem *cfg_mem;
|
||||
tuple_t *tuple;
|
||||
@ -827,12 +822,12 @@ static int osi_setup(dev_link_t *link, u_short manfid, u_short cardid)
|
||||
|
||||
/* Read the station address from tuple 0x90, subtuple 0x04 */
|
||||
tuple->DesiredTuple = 0x90;
|
||||
i = pcmcia_get_first_tuple(handle, tuple);
|
||||
i = pcmcia_get_first_tuple(link, tuple);
|
||||
while (i == CS_SUCCESS) {
|
||||
i = pcmcia_get_tuple_data(handle, tuple);
|
||||
i = pcmcia_get_tuple_data(link, tuple);
|
||||
if ((i != CS_SUCCESS) || (buf[0] == 0x04))
|
||||
break;
|
||||
i = pcmcia_get_next_tuple(handle, tuple);
|
||||
i = pcmcia_get_next_tuple(link, tuple);
|
||||
}
|
||||
if (i != CS_SUCCESS) {
|
||||
rc = -1;
|
||||
@ -865,9 +860,8 @@ free_cfg_mem:
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int smc91c92_suspend(struct pcmcia_device *p_dev)
|
||||
static int smc91c92_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
if ((link->state & DEV_CONFIG) && (link->open))
|
||||
@ -876,9 +870,8 @@ static int smc91c92_suspend(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int smc91c92_resume(struct pcmcia_device *p_dev)
|
||||
static int smc91c92_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
struct smc_private *smc = netdev_priv(dev);
|
||||
int i;
|
||||
@ -922,7 +915,7 @@ static int smc91c92_resume(struct pcmcia_device *p_dev)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static int check_sig(dev_link_t *link)
|
||||
static int check_sig(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev = link->priv;
|
||||
kio_addr_t ioaddr = dev->base_addr;
|
||||
@ -960,9 +953,9 @@ static int check_sig(dev_link_t *link)
|
||||
};
|
||||
printk(KERN_INFO "smc91c92_cs: using 8-bit IO window.\n");
|
||||
|
||||
smc91c92_suspend(link->handle);
|
||||
pcmcia_modify_configuration(link->handle, &mod);
|
||||
smc91c92_resume(link->handle);
|
||||
smc91c92_suspend(link);
|
||||
pcmcia_modify_configuration(link, &mod);
|
||||
smc91c92_resume(link);
|
||||
return check_sig(link);
|
||||
}
|
||||
return -ENODEV;
|
||||
@ -977,11 +970,10 @@ static int check_sig(dev_link_t *link)
|
||||
======================================================================*/
|
||||
|
||||
#define CS_EXIT_TEST(ret, svc, label) \
|
||||
if (ret != CS_SUCCESS) { cs_error(link->handle, svc, ret); goto label; }
|
||||
if (ret != CS_SUCCESS) { cs_error(link, svc, ret); goto label; }
|
||||
|
||||
static void smc91c92_config(dev_link_t *link)
|
||||
static void smc91c92_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
struct net_device *dev = link->priv;
|
||||
struct smc_private *smc = netdev_priv(dev);
|
||||
struct smc_cfg_mem *cfg_mem;
|
||||
@ -1008,14 +1000,14 @@ static void smc91c92_config(dev_link_t *link)
|
||||
tuple->TupleDataMax = 64;
|
||||
|
||||
tuple->DesiredTuple = CISTPL_CONFIG;
|
||||
i = first_tuple(handle, tuple, parse);
|
||||
i = first_tuple(link, tuple, parse);
|
||||
CS_EXIT_TEST(i, ParseTuple, config_failed);
|
||||
link->conf.ConfigBase = parse->config.base;
|
||||
link->conf.Present = parse->config.rmask[0];
|
||||
|
||||
tuple->DesiredTuple = CISTPL_MANFID;
|
||||
tuple->Attributes = TUPLE_RETURN_COMMON;
|
||||
if (first_tuple(handle, tuple, parse) == CS_SUCCESS) {
|
||||
if (first_tuple(link, tuple, parse) == CS_SUCCESS) {
|
||||
smc->manfid = parse->manfid.manf;
|
||||
smc->cardid = parse->manfid.card;
|
||||
}
|
||||
@ -1036,9 +1028,9 @@ static void smc91c92_config(dev_link_t *link)
|
||||
}
|
||||
CS_EXIT_TEST(i, RequestIO, config_failed);
|
||||
|
||||
i = pcmcia_request_irq(link->handle, &link->irq);
|
||||
i = pcmcia_request_irq(link, &link->irq);
|
||||
CS_EXIT_TEST(i, RequestIRQ, config_failed);
|
||||
i = pcmcia_request_configuration(link->handle, &link->conf);
|
||||
i = pcmcia_request_configuration(link, &link->conf);
|
||||
CS_EXIT_TEST(i, RequestConfiguration, config_failed);
|
||||
|
||||
if (smc->manfid == MANFID_MOTOROLA)
|
||||
@ -1119,7 +1111,7 @@ static void smc91c92_config(dev_link_t *link)
|
||||
|
||||
link->dev_node = &smc->node;
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(handle));
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(link));
|
||||
|
||||
if (register_netdev(dev) != 0) {
|
||||
printk(KERN_ERR "smc91c92_cs: register_netdev() failed\n");
|
||||
@ -1172,7 +1164,7 @@ config_failed: /* CS_EXIT_TEST() calls jump to here... */
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void smc91c92_release(dev_link_t *link)
|
||||
static void smc91c92_release(struct pcmcia_device *link)
|
||||
{
|
||||
DEBUG(0, "smc91c92_release(0x%p)\n", link);
|
||||
if (link->win) {
|
||||
@ -1180,7 +1172,7 @@ static void smc91c92_release(dev_link_t *link)
|
||||
struct smc_private *smc = netdev_priv(dev);
|
||||
iounmap(smc->base);
|
||||
}
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
}
|
||||
|
||||
/*======================================================================
|
||||
@ -1269,7 +1261,7 @@ static void smc_dump(struct net_device *dev)
|
||||
static int smc_open(struct net_device *dev)
|
||||
{
|
||||
struct smc_private *smc = netdev_priv(dev);
|
||||
dev_link_t *link = smc->p_dev;
|
||||
struct pcmcia_device *link = smc->p_dev;
|
||||
|
||||
#ifdef PCMCIA_DEBUG
|
||||
DEBUG(0, "%s: smc_open(%p), ID/Window %4.4x.\n",
|
||||
@ -1306,7 +1298,7 @@ static int smc_open(struct net_device *dev)
|
||||
static int smc_close(struct net_device *dev)
|
||||
{
|
||||
struct smc_private *smc = netdev_priv(dev);
|
||||
dev_link_t *link = smc->p_dev;
|
||||
struct pcmcia_device *link = smc->p_dev;
|
||||
kio_addr_t ioaddr = dev->base_addr;
|
||||
|
||||
DEBUG(0, "%s: smc_close(), status %4.4x.\n",
|
||||
|
@ -289,9 +289,9 @@ static void mii_wr(kio_addr_t ioaddr, u_char phyaddr, u_char phyreg,
|
||||
* and ejection events. They are invoked from the event handler.
|
||||
*/
|
||||
|
||||
static int has_ce2_string(dev_link_t * link);
|
||||
static void xirc2ps_config(dev_link_t * link);
|
||||
static void xirc2ps_release(dev_link_t * link);
|
||||
static int has_ce2_string(struct pcmcia_device * link);
|
||||
static void xirc2ps_config(struct pcmcia_device * link);
|
||||
static void xirc2ps_release(struct pcmcia_device * link);
|
||||
|
||||
/****************
|
||||
* The attach() and detach() entry points are used to create and destroy
|
||||
@ -313,10 +313,10 @@ static irqreturn_t xirc2ps_interrupt(int irq, void *dev_id, struct pt_regs *regs
|
||||
/****************
|
||||
* A linked list of "instances" of the device. Each actual
|
||||
* PCMCIA card corresponds to one device instance, and is described
|
||||
* by one dev_link_t structure (defined in ds.h).
|
||||
* by one struct pcmcia_device structure (defined in ds.h).
|
||||
*
|
||||
* You may not want to use a linked list for this -- for example, the
|
||||
* memory card driver uses an array of dev_link_t pointers, where minor
|
||||
* memory card driver uses an array of struct pcmcia_device pointers, where minor
|
||||
* device numbers are used to derive the corresponding array index.
|
||||
*/
|
||||
|
||||
@ -326,7 +326,7 @@ static irqreturn_t xirc2ps_interrupt(int irq, void *dev_id, struct pt_regs *regs
|
||||
* example, ethernet cards, modems). In other cases, there may be
|
||||
* many actual or logical devices (SCSI adapters, memory cards with
|
||||
* multiple partitions). The dev_node_t structures need to be kept
|
||||
* in a linked list starting at the 'dev' field of a dev_link_t
|
||||
* in a linked list starting at the 'dev' field of a struct pcmcia_device
|
||||
* structure. We allocate them in the card's private data structure,
|
||||
* because they generally can't be allocated dynamically.
|
||||
*/
|
||||
@ -355,7 +355,7 @@ static void do_tx_timeout(struct net_device *dev);
|
||||
static struct net_device_stats *do_get_stats(struct net_device *dev);
|
||||
static void set_addresses(struct net_device *dev);
|
||||
static void set_multicast_list(struct net_device *dev);
|
||||
static int set_card_type(dev_link_t *link, const void *s);
|
||||
static int set_card_type(struct pcmcia_device *link, const void *s);
|
||||
static int do_config(struct net_device *dev, struct ifmap *map);
|
||||
static int do_open(struct net_device *dev);
|
||||
static int do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
|
||||
@ -368,7 +368,7 @@ static int do_stop(struct net_device *dev);
|
||||
|
||||
/*=============== Helper functions =========================*/
|
||||
static int
|
||||
first_tuple(client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
|
||||
first_tuple(struct pcmcia_device *handle, tuple_t *tuple, cisparse_t *parse)
|
||||
{
|
||||
int err;
|
||||
|
||||
@ -379,7 +379,7 @@ first_tuple(client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
|
||||
}
|
||||
|
||||
static int
|
||||
next_tuple(client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
|
||||
next_tuple(struct pcmcia_device *handle, tuple_t *tuple, cisparse_t *parse)
|
||||
{
|
||||
int err;
|
||||
|
||||
@ -553,11 +553,10 @@ mii_wr(kio_addr_t ioaddr, u_char phyaddr, u_char phyreg, unsigned data, int len)
|
||||
*/
|
||||
|
||||
static int
|
||||
xirc2ps_attach(struct pcmcia_device *p_dev)
|
||||
xirc2ps_attach(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev;
|
||||
local_info_t *local;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "attach()\n");
|
||||
|
||||
@ -566,7 +565,7 @@ xirc2ps_attach(struct pcmcia_device *p_dev)
|
||||
if (!dev)
|
||||
return -ENOMEM;
|
||||
local = netdev_priv(dev);
|
||||
local->p_dev = p_dev;
|
||||
local->p_dev = link;
|
||||
link->priv = dev;
|
||||
|
||||
/* General socket configuration */
|
||||
@ -606,9 +605,8 @@ xirc2ps_attach(struct pcmcia_device *p_dev)
|
||||
*/
|
||||
|
||||
static void
|
||||
xirc2ps_detach(struct pcmcia_device *p_dev)
|
||||
xirc2ps_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
DEBUG(0, "detach(0x%p)\n", link);
|
||||
@ -641,7 +639,7 @@ xirc2ps_detach(struct pcmcia_device *p_dev)
|
||||
*
|
||||
*/
|
||||
static int
|
||||
set_card_type(dev_link_t *link, const void *s)
|
||||
set_card_type(struct pcmcia_device *link, const void *s)
|
||||
{
|
||||
struct net_device *dev = link->priv;
|
||||
local_info_t *local = netdev_priv(dev);
|
||||
@ -710,9 +708,8 @@ set_card_type(dev_link_t *link, const void *s)
|
||||
* Returns: true if this is a CE2
|
||||
*/
|
||||
static int
|
||||
has_ce2_string(dev_link_t * link)
|
||||
has_ce2_string(struct pcmcia_device * link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
u_char buf[256];
|
||||
@ -722,7 +719,7 @@ has_ce2_string(dev_link_t * link)
|
||||
tuple.TupleDataMax = 254;
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.DesiredTuple = CISTPL_VERS_1;
|
||||
if (!first_tuple(handle, &tuple, &parse) && parse.version_1.ns > 2) {
|
||||
if (!first_tuple(link, &tuple, &parse) && parse.version_1.ns > 2) {
|
||||
if (strstr(parse.version_1.str + parse.version_1.ofs[2], "CE2"))
|
||||
return 1;
|
||||
}
|
||||
@ -735,9 +732,8 @@ has_ce2_string(dev_link_t * link)
|
||||
* ethernet device available to the system.
|
||||
*/
|
||||
static void
|
||||
xirc2ps_config(dev_link_t * link)
|
||||
xirc2ps_config(struct pcmcia_device * link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
struct net_device *dev = link->priv;
|
||||
local_info_t *local = netdev_priv(dev);
|
||||
tuple_t tuple;
|
||||
@ -763,7 +759,7 @@ xirc2ps_config(dev_link_t * link)
|
||||
|
||||
/* Is this a valid card */
|
||||
tuple.DesiredTuple = CISTPL_MANFID;
|
||||
if ((err=first_tuple(handle, &tuple, &parse))) {
|
||||
if ((err=first_tuple(link, &tuple, &parse))) {
|
||||
printk(KNOT_XIRC "manfid not found in CIS\n");
|
||||
goto failure;
|
||||
}
|
||||
@ -799,15 +795,15 @@ xirc2ps_config(dev_link_t * link)
|
||||
|
||||
/* get configuration stuff */
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
if ((err=first_tuple(handle, &tuple, &parse)))
|
||||
if ((err=first_tuple(link, &tuple, &parse)))
|
||||
goto cis_error;
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
/* get the ethernet address from the CIS */
|
||||
tuple.DesiredTuple = CISTPL_FUNCE;
|
||||
for (err = first_tuple(handle, &tuple, &parse); !err;
|
||||
err = next_tuple(handle, &tuple, &parse)) {
|
||||
for (err = first_tuple(link, &tuple, &parse); !err;
|
||||
err = next_tuple(link, &tuple, &parse)) {
|
||||
/* Once I saw two CISTPL_FUNCE_LAN_NODE_ID entries:
|
||||
* the first one with a length of zero the second correct -
|
||||
* so I skip all entries with length 0 */
|
||||
@ -817,8 +813,8 @@ xirc2ps_config(dev_link_t * link)
|
||||
}
|
||||
if (err) { /* not found: try to get the node-id from tuple 0x89 */
|
||||
tuple.DesiredTuple = 0x89; /* data layout looks like tuple 0x22 */
|
||||
if ((err = pcmcia_get_first_tuple(handle, &tuple)) == 0 &&
|
||||
(err = pcmcia_get_tuple_data(handle, &tuple)) == 0) {
|
||||
if ((err = pcmcia_get_first_tuple(link, &tuple)) == 0 &&
|
||||
(err = pcmcia_get_tuple_data(link, &tuple)) == 0) {
|
||||
if (tuple.TupleDataLen == 8 && *buf == CISTPL_FUNCE_LAN_NODE_ID)
|
||||
memcpy(&parse, buf, 8);
|
||||
else
|
||||
@ -827,8 +823,8 @@ xirc2ps_config(dev_link_t * link)
|
||||
}
|
||||
if (err) { /* another try (James Lehmer's CE2 version 4.1)*/
|
||||
tuple.DesiredTuple = CISTPL_FUNCE;
|
||||
for (err = first_tuple(handle, &tuple, &parse); !err;
|
||||
err = next_tuple(handle, &tuple, &parse)) {
|
||||
for (err = first_tuple(link, &tuple, &parse); !err;
|
||||
err = next_tuple(link, &tuple, &parse)) {
|
||||
if (parse.funce.type == 0x02 && parse.funce.data[0] == 1
|
||||
&& parse.funce.data[1] == 6 && tuple.TupleDataLen == 13) {
|
||||
buf[1] = 4;
|
||||
@ -871,14 +867,14 @@ xirc2ps_config(dev_link_t * link)
|
||||
* Ethernet port */
|
||||
link->io.NumPorts1 = 16; /* no Mako stuff anymore */
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
for (err = first_tuple(handle, &tuple, &parse); !err;
|
||||
err = next_tuple(handle, &tuple, &parse)) {
|
||||
for (err = first_tuple(link, &tuple, &parse); !err;
|
||||
err = next_tuple(link, &tuple, &parse)) {
|
||||
if (cf->io.nwin > 0 && (cf->io.win[0].base & 0xf) == 8) {
|
||||
for (ioaddr = 0x300; ioaddr < 0x400; ioaddr += 0x10) {
|
||||
link->conf.ConfigIndex = cf->index ;
|
||||
link->io.BasePort2 = cf->io.win[0].base;
|
||||
link->io.BasePort1 = ioaddr;
|
||||
if (!(err=pcmcia_request_io(link->handle, &link->io)))
|
||||
if (!(err=pcmcia_request_io(link, &link->io)))
|
||||
goto port_found;
|
||||
}
|
||||
}
|
||||
@ -892,15 +888,15 @@ xirc2ps_config(dev_link_t * link)
|
||||
*/
|
||||
for (pass=0; pass < 2; pass++) {
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
for (err = first_tuple(handle, &tuple, &parse); !err;
|
||||
err = next_tuple(handle, &tuple, &parse)){
|
||||
for (err = first_tuple(link, &tuple, &parse); !err;
|
||||
err = next_tuple(link, &tuple, &parse)){
|
||||
if (cf->io.nwin > 0 && (cf->io.win[0].base & 0xf) == 8){
|
||||
link->conf.ConfigIndex = cf->index ;
|
||||
link->io.BasePort2 = cf->io.win[0].base;
|
||||
link->io.BasePort1 = link->io.BasePort2
|
||||
+ (pass ? (cf->index & 0x20 ? -24:8)
|
||||
: (cf->index & 0x20 ? 8:-24));
|
||||
if (!(err=pcmcia_request_io(link->handle, &link->io)))
|
||||
if (!(err=pcmcia_request_io(link, &link->io)))
|
||||
goto port_found;
|
||||
}
|
||||
}
|
||||
@ -915,12 +911,12 @@ xirc2ps_config(dev_link_t * link)
|
||||
link->io.NumPorts1 = 16;
|
||||
for (ioaddr = 0x300; ioaddr < 0x400; ioaddr += 0x10) {
|
||||
link->io.BasePort1 = ioaddr;
|
||||
if (!(err=pcmcia_request_io(link->handle, &link->io)))
|
||||
if (!(err=pcmcia_request_io(link, &link->io)))
|
||||
goto port_found;
|
||||
}
|
||||
link->io.BasePort1 = 0; /* let CS decide */
|
||||
if ((err=pcmcia_request_io(link->handle, &link->io))) {
|
||||
cs_error(link->handle, RequestIO, err);
|
||||
if ((err=pcmcia_request_io(link, &link->io))) {
|
||||
cs_error(link, RequestIO, err);
|
||||
goto config_error;
|
||||
}
|
||||
}
|
||||
@ -932,8 +928,8 @@ xirc2ps_config(dev_link_t * link)
|
||||
* Now allocate an interrupt line. Note that this does not
|
||||
* actually assign a handler to the interrupt.
|
||||
*/
|
||||
if ((err=pcmcia_request_irq(link->handle, &link->irq))) {
|
||||
cs_error(link->handle, RequestIRQ, err);
|
||||
if ((err=pcmcia_request_irq(link, &link->irq))) {
|
||||
cs_error(link, RequestIRQ, err);
|
||||
goto config_error;
|
||||
}
|
||||
|
||||
@ -941,8 +937,8 @@ xirc2ps_config(dev_link_t * link)
|
||||
* This actually configures the PCMCIA socket -- setting up
|
||||
* the I/O windows and the interrupt mapping.
|
||||
*/
|
||||
if ((err=pcmcia_request_configuration(link->handle, &link->conf))) {
|
||||
cs_error(link->handle, RequestConfiguration, err);
|
||||
if ((err=pcmcia_request_configuration(link, &link->conf))) {
|
||||
cs_error(link, RequestConfiguration, err);
|
||||
goto config_error;
|
||||
}
|
||||
|
||||
@ -959,15 +955,15 @@ xirc2ps_config(dev_link_t * link)
|
||||
reg.Action = CS_WRITE;
|
||||
reg.Offset = CISREG_IOBASE_0;
|
||||
reg.Value = link->io.BasePort2 & 0xff;
|
||||
if ((err = pcmcia_access_configuration_register(link->handle, ®))) {
|
||||
cs_error(link->handle, AccessConfigurationRegister, err);
|
||||
if ((err = pcmcia_access_configuration_register(link, ®))) {
|
||||
cs_error(link, AccessConfigurationRegister, err);
|
||||
goto config_error;
|
||||
}
|
||||
reg.Action = CS_WRITE;
|
||||
reg.Offset = CISREG_IOBASE_1;
|
||||
reg.Value = (link->io.BasePort2 >> 8) & 0xff;
|
||||
if ((err = pcmcia_access_configuration_register(link->handle, ®))) {
|
||||
cs_error(link->handle, AccessConfigurationRegister, err);
|
||||
if ((err = pcmcia_access_configuration_register(link, ®))) {
|
||||
cs_error(link, AccessConfigurationRegister, err);
|
||||
goto config_error;
|
||||
}
|
||||
|
||||
@ -978,15 +974,15 @@ xirc2ps_config(dev_link_t * link)
|
||||
req.Attributes = WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_AM|WIN_ENABLE;
|
||||
req.Base = req.Size = 0;
|
||||
req.AccessSpeed = 0;
|
||||
if ((err = pcmcia_request_window(&link->handle, &req, &link->win))) {
|
||||
cs_error(link->handle, RequestWindow, err);
|
||||
if ((err = pcmcia_request_window(&link, &req, &link->win))) {
|
||||
cs_error(link, RequestWindow, err);
|
||||
goto config_error;
|
||||
}
|
||||
local->dingo_ccr = ioremap(req.Base,0x1000) + 0x0800;
|
||||
mem.CardOffset = 0x0;
|
||||
mem.Page = 0;
|
||||
if ((err = pcmcia_map_mem_page(link->win, &mem))) {
|
||||
cs_error(link->handle, MapMemPage, err);
|
||||
cs_error(link, MapMemPage, err);
|
||||
goto config_error;
|
||||
}
|
||||
|
||||
@ -1048,7 +1044,7 @@ xirc2ps_config(dev_link_t * link)
|
||||
|
||||
link->dev_node = &local->node;
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(handle));
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(link));
|
||||
|
||||
if ((err=register_netdev(dev))) {
|
||||
printk(KNOT_XIRC "register_netdev() failed\n");
|
||||
@ -1084,7 +1080,7 @@ xirc2ps_config(dev_link_t * link)
|
||||
* still open, this will be postponed until it is closed.
|
||||
*/
|
||||
static void
|
||||
xirc2ps_release(dev_link_t *link)
|
||||
xirc2ps_release(struct pcmcia_device *link)
|
||||
{
|
||||
DEBUG(0, "release(0x%p)\n", link);
|
||||
|
||||
@ -1094,15 +1090,14 @@ xirc2ps_release(dev_link_t *link)
|
||||
if (local->dingo)
|
||||
iounmap(local->dingo_ccr - 0x0800);
|
||||
}
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
} /* xirc2ps_release */
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
|
||||
static int xirc2ps_suspend(struct pcmcia_device *p_dev)
|
||||
static int xirc2ps_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
if ((link->state & DEV_CONFIG) && (link->open)) {
|
||||
@ -1113,9 +1108,8 @@ static int xirc2ps_suspend(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int xirc2ps_resume(struct pcmcia_device *p_dev)
|
||||
static int xirc2ps_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
if ((link->state & DEV_CONFIG) && (link->open)) {
|
||||
@ -1534,7 +1528,7 @@ static int
|
||||
do_open(struct net_device *dev)
|
||||
{
|
||||
local_info_t *lp = netdev_priv(dev);
|
||||
dev_link_t *link = lp->p_dev;
|
||||
struct pcmcia_device *link = lp->p_dev;
|
||||
|
||||
DEBUG(0, "do_open(%p)\n", dev);
|
||||
|
||||
@ -1864,7 +1858,7 @@ do_stop(struct net_device *dev)
|
||||
{
|
||||
kio_addr_t ioaddr = dev->base_addr;
|
||||
local_info_t *lp = netdev_priv(dev);
|
||||
dev_link_t *link = lp->p_dev;
|
||||
struct pcmcia_device *link = lp->p_dev;
|
||||
|
||||
DEBUG(0, "do_stop(%p)\n", dev);
|
||||
|
||||
|
@ -80,8 +80,8 @@ MODULE_SUPPORTED_DEVICE("Aironet 4500, 4800 and Cisco 340 PCMCIA cards");
|
||||
event handler.
|
||||
*/
|
||||
|
||||
static void airo_config(dev_link_t *link);
|
||||
static void airo_release(dev_link_t *link);
|
||||
static void airo_config(struct pcmcia_device *link);
|
||||
static void airo_release(struct pcmcia_device *link);
|
||||
|
||||
/*
|
||||
The attach() and detach() entry points are used to create and destroy
|
||||
@ -101,10 +101,10 @@ static void airo_detach(struct pcmcia_device *p_dev);
|
||||
/*
|
||||
A linked list of "instances" of the aironet device. Each actual
|
||||
PCMCIA card corresponds to one device instance, and is described
|
||||
by one dev_link_t structure (defined in ds.h).
|
||||
by one struct pcmcia_device structure (defined in ds.h).
|
||||
|
||||
You may not want to use a linked list for this -- for example, the
|
||||
memory card driver uses an array of dev_link_t pointers, where minor
|
||||
memory card driver uses an array of struct pcmcia_device pointers, where minor
|
||||
device numbers are used to derive the corresponding array index.
|
||||
*/
|
||||
|
||||
@ -114,7 +114,7 @@ static void airo_detach(struct pcmcia_device *p_dev);
|
||||
example, ethernet cards, modems). In other cases, there may be
|
||||
many actual or logical devices (SCSI adapters, memory cards with
|
||||
multiple partitions). The dev_node_t structures need to be kept
|
||||
in a linked list starting at the 'dev' field of a dev_link_t
|
||||
in a linked list starting at the 'dev' field of a struct pcmcia_device
|
||||
structure. We allocate them in the card's private data structure,
|
||||
because they generally shouldn't be allocated dynamically.
|
||||
|
||||
@ -185,10 +185,8 @@ static int airo_attach(struct pcmcia_device *p_dev)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void airo_detach(struct pcmcia_device *p_dev)
|
||||
static void airo_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "airo_detach(0x%p)\n", link);
|
||||
|
||||
if (link->state & DEV_CONFIG)
|
||||
@ -213,9 +211,8 @@ static void airo_detach(struct pcmcia_device *p_dev)
|
||||
#define CS_CHECK(fn, ret) \
|
||||
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
|
||||
static void airo_config(dev_link_t *link)
|
||||
static void airo_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle;
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
local_info_t *dev;
|
||||
@ -223,8 +220,7 @@ static void airo_config(dev_link_t *link)
|
||||
u_char buf[64];
|
||||
win_req_t req;
|
||||
memreq_t map;
|
||||
|
||||
handle = link->handle;
|
||||
|
||||
dev = link->priv;
|
||||
|
||||
DEBUG(0, "airo_config(0x%p)\n", link);
|
||||
@ -238,9 +234,9 @@ static void airo_config(dev_link_t *link)
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
@ -260,12 +256,12 @@ static void airo_config(dev_link_t *link)
|
||||
will only use the CIS to fill in implementation-defined details.
|
||||
*/
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
while (1) {
|
||||
cistpl_cftable_entry_t dflt = { 0 };
|
||||
cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
|
||||
if (pcmcia_get_tuple_data(handle, &tuple) != 0 ||
|
||||
pcmcia_parse_tuple(handle, &tuple, &parse) != 0)
|
||||
if (pcmcia_get_tuple_data(link, &tuple) != 0 ||
|
||||
pcmcia_parse_tuple(link, &tuple, &parse) != 0)
|
||||
goto next_entry;
|
||||
|
||||
if (cfg->flags & CISTPL_CFTABLE_DEFAULT) dflt = *cfg;
|
||||
@ -310,12 +306,12 @@ static void airo_config(dev_link_t *link)
|
||||
}
|
||||
|
||||
/* This reserves IO space but doesn't actually enable it */
|
||||
if (pcmcia_request_io(link->handle, &link->io) != 0)
|
||||
if (pcmcia_request_io(link, &link->io) != 0)
|
||||
goto next_entry;
|
||||
|
||||
/*
|
||||
Now set up a common memory window, if needed. There is room
|
||||
in the dev_link_t structure for one memory window handle,
|
||||
in the struct pcmcia_device structure for one memory window handle,
|
||||
but if the base addresses need to be saved, or if multiple
|
||||
windows are needed, the info should go in the private data
|
||||
structure for this device.
|
||||
@ -331,7 +327,7 @@ static void airo_config(dev_link_t *link)
|
||||
req.Base = mem->win[0].host_addr;
|
||||
req.Size = mem->win[0].len;
|
||||
req.AccessSpeed = 0;
|
||||
if (pcmcia_request_window(&link->handle, &req, &link->win) != 0)
|
||||
if (pcmcia_request_window(&link, &req, &link->win) != 0)
|
||||
goto next_entry;
|
||||
map.Page = 0; map.CardOffset = mem->win[0].card_addr;
|
||||
if (pcmcia_map_mem_page(link->win, &map) != 0)
|
||||
@ -341,7 +337,7 @@ static void airo_config(dev_link_t *link)
|
||||
break;
|
||||
|
||||
next_entry:
|
||||
CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(handle, &tuple));
|
||||
CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(link, &tuple));
|
||||
}
|
||||
|
||||
/*
|
||||
@ -350,17 +346,17 @@ static void airo_config(dev_link_t *link)
|
||||
irq structure is initialized.
|
||||
*/
|
||||
if (link->conf.Attributes & CONF_ENABLE_IRQ)
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link->handle, &link->irq));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
|
||||
/*
|
||||
This actually configures the PCMCIA socket -- setting up
|
||||
the I/O windows and the interrupt mapping, and putting the
|
||||
card and host interface into "Memory and IO" mode.
|
||||
*/
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link->handle, &link->conf));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
((local_info_t*)link->priv)->eth_dev =
|
||||
init_airo_card( link->irq.AssignedIRQ,
|
||||
link->io.BasePort1, 1, &handle_to_dev(handle) );
|
||||
link->io.BasePort1, 1, &handle_to_dev(link) );
|
||||
if (!((local_info_t*)link->priv)->eth_dev) goto cs_failed;
|
||||
|
||||
/*
|
||||
@ -393,7 +389,7 @@ static void airo_config(dev_link_t *link)
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
airo_release(link);
|
||||
|
||||
} /* airo_config */
|
||||
@ -406,15 +402,14 @@ static void airo_config(dev_link_t *link)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void airo_release(dev_link_t *link)
|
||||
static void airo_release(struct pcmcia_device *link)
|
||||
{
|
||||
DEBUG(0, "airo_release(0x%p)\n", link);
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
}
|
||||
|
||||
static int airo_suspend(struct pcmcia_device *p_dev)
|
||||
static int airo_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
local_info_t *local = link->priv;
|
||||
|
||||
if (link->state & DEV_CONFIG)
|
||||
@ -423,9 +418,8 @@ static int airo_suspend(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int airo_resume(struct pcmcia_device *p_dev)
|
||||
static int airo_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
local_info_t *local = link->priv;
|
||||
|
||||
if ((link->state & DEV_CONFIG) && (link->open)) {
|
||||
|
@ -91,8 +91,8 @@ MODULE_SUPPORTED_DEVICE("Atmel at76c50x PCMCIA cards");
|
||||
event handler.
|
||||
*/
|
||||
|
||||
static void atmel_config(dev_link_t *link);
|
||||
static void atmel_release(dev_link_t *link);
|
||||
static void atmel_config(struct pcmcia_device *link);
|
||||
static void atmel_release(struct pcmcia_device *link);
|
||||
|
||||
/*
|
||||
The attach() and detach() entry points are used to create and destroy
|
||||
@ -112,10 +112,10 @@ static void atmel_detach(struct pcmcia_device *p_dev);
|
||||
/*
|
||||
A linked list of "instances" of the atmelnet device. Each actual
|
||||
PCMCIA card corresponds to one device instance, and is described
|
||||
by one dev_link_t structure (defined in ds.h).
|
||||
by one struct pcmcia_device structure (defined in ds.h).
|
||||
|
||||
You may not want to use a linked list for this -- for example, the
|
||||
memory card driver uses an array of dev_link_t pointers, where minor
|
||||
memory card driver uses an array of struct pcmcia_device pointers, where minor
|
||||
device numbers are used to derive the corresponding array index.
|
||||
*/
|
||||
|
||||
@ -125,7 +125,7 @@ static void atmel_detach(struct pcmcia_device *p_dev);
|
||||
example, ethernet cards, modems). In other cases, there may be
|
||||
many actual or logical devices (SCSI adapters, memory cards with
|
||||
multiple partitions). The dev_node_t structures need to be kept
|
||||
in a linked list starting at the 'dev' field of a dev_link_t
|
||||
in a linked list starting at the 'dev' field of a struct pcmcia_device
|
||||
structure. We allocate them in the card's private data structure,
|
||||
because they generally shouldn't be allocated dynamically.
|
||||
|
||||
@ -196,10 +196,8 @@ static int atmel_attach(struct pcmcia_device *p_dev)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void atmel_detach(struct pcmcia_device *p_dev)
|
||||
static void atmel_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "atmel_detach(0x%p)\n", link);
|
||||
|
||||
if (link->state & DEV_CONFIG)
|
||||
@ -223,7 +221,7 @@ do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
about the current existance of the card */
|
||||
static int card_present(void *arg)
|
||||
{
|
||||
dev_link_t *link = (dev_link_t *)arg;
|
||||
struct pcmcia_device *link = (struct pcmcia_device *)arg;
|
||||
if (link->state & DEV_SUSPEND)
|
||||
return 0;
|
||||
else if (link->state & DEV_PRESENT)
|
||||
@ -232,9 +230,8 @@ static int card_present(void *arg)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void atmel_config(dev_link_t *link)
|
||||
static void atmel_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle;
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
local_info_t *dev;
|
||||
@ -242,9 +239,8 @@ static void atmel_config(dev_link_t *link)
|
||||
u_char buf[64];
|
||||
struct pcmcia_device_id *did;
|
||||
|
||||
handle = link->handle;
|
||||
dev = link->priv;
|
||||
did = handle_to_dev(handle).driver_data;
|
||||
did = handle_to_dev(link).driver_data;
|
||||
|
||||
DEBUG(0, "atmel_config(0x%p)\n", link);
|
||||
|
||||
@ -258,9 +254,9 @@ static void atmel_config(dev_link_t *link)
|
||||
registers.
|
||||
*/
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
@ -280,12 +276,12 @@ static void atmel_config(dev_link_t *link)
|
||||
will only use the CIS to fill in implementation-defined details.
|
||||
*/
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
while (1) {
|
||||
cistpl_cftable_entry_t dflt = { 0 };
|
||||
cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
|
||||
if (pcmcia_get_tuple_data(handle, &tuple) != 0 ||
|
||||
pcmcia_parse_tuple(handle, &tuple, &parse) != 0)
|
||||
if (pcmcia_get_tuple_data(link, &tuple) != 0 ||
|
||||
pcmcia_parse_tuple(link, &tuple, &parse) != 0)
|
||||
goto next_entry;
|
||||
|
||||
if (cfg->flags & CISTPL_CFTABLE_DEFAULT) dflt = *cfg;
|
||||
@ -330,14 +326,14 @@ static void atmel_config(dev_link_t *link)
|
||||
}
|
||||
|
||||
/* This reserves IO space but doesn't actually enable it */
|
||||
if (pcmcia_request_io(link->handle, &link->io) != 0)
|
||||
if (pcmcia_request_io(link, &link->io) != 0)
|
||||
goto next_entry;
|
||||
|
||||
/* If we got this far, we're cool! */
|
||||
break;
|
||||
|
||||
next_entry:
|
||||
CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(handle, &tuple));
|
||||
CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(link, &tuple));
|
||||
}
|
||||
|
||||
/*
|
||||
@ -346,14 +342,14 @@ static void atmel_config(dev_link_t *link)
|
||||
irq structure is initialized.
|
||||
*/
|
||||
if (link->conf.Attributes & CONF_ENABLE_IRQ)
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link->handle, &link->irq));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
|
||||
/*
|
||||
This actually configures the PCMCIA socket -- setting up
|
||||
the I/O windows and the interrupt mapping, and putting the
|
||||
card and host interface into "Memory and IO" mode.
|
||||
*/
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link->handle, &link->conf));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
|
||||
if (link->irq.AssignedIRQ == 0) {
|
||||
printk(KERN_ALERT
|
||||
@ -365,7 +361,7 @@ static void atmel_config(dev_link_t *link)
|
||||
init_atmel_card(link->irq.AssignedIRQ,
|
||||
link->io.BasePort1,
|
||||
did ? did->driver_info : ATMEL_FW_TYPE_NONE,
|
||||
&handle_to_dev(handle),
|
||||
&handle_to_dev(link),
|
||||
card_present,
|
||||
link);
|
||||
if (!((local_info_t*)link->priv)->eth_dev)
|
||||
@ -384,7 +380,7 @@ static void atmel_config(dev_link_t *link)
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
atmel_release(link);
|
||||
}
|
||||
|
||||
@ -396,7 +392,7 @@ static void atmel_config(dev_link_t *link)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void atmel_release(dev_link_t *link)
|
||||
static void atmel_release(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev = ((local_info_t*)link->priv)->eth_dev;
|
||||
|
||||
@ -406,12 +402,11 @@ static void atmel_release(dev_link_t *link)
|
||||
stop_atmel_card(dev);
|
||||
((local_info_t*)link->priv)->eth_dev = NULL;
|
||||
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
}
|
||||
|
||||
static int atmel_suspend(struct pcmcia_device *dev)
|
||||
static int atmel_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(dev);
|
||||
local_info_t *local = link->priv;
|
||||
|
||||
if (link->state & DEV_CONFIG)
|
||||
@ -420,9 +415,8 @@ static int atmel_suspend(struct pcmcia_device *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int atmel_resume(struct pcmcia_device *dev)
|
||||
static int atmel_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(dev);
|
||||
local_info_t *local = link->priv;
|
||||
|
||||
if (link->state & DEV_CONFIG) {
|
||||
|
@ -42,7 +42,7 @@ MODULE_PARM_DESC(ignore_cis_vcc, "Ignore broken CIS VCC entry");
|
||||
/* struct local_info::hw_priv */
|
||||
struct hostap_cs_priv {
|
||||
dev_node_t node;
|
||||
dev_link_t *link;
|
||||
struct pcmcia_device *link;
|
||||
int sandisk_connectplus;
|
||||
};
|
||||
|
||||
@ -204,7 +204,7 @@ static int hfa384x_to_bap(struct net_device *dev, u16 bap, void *buf, int len)
|
||||
|
||||
static void prism2_detach(struct pcmcia_device *p_dev);
|
||||
static void prism2_release(u_long arg);
|
||||
static int prism2_config(dev_link_t *link);
|
||||
static int prism2_config(struct pcmcia_device *link);
|
||||
|
||||
|
||||
static int prism2_pccard_card_present(local_info_t *local)
|
||||
@ -237,7 +237,7 @@ static void sandisk_set_iobase(local_info_t *local)
|
||||
reg.Action = CS_WRITE;
|
||||
reg.Offset = 0x10; /* 0x3f0 IO base 1 */
|
||||
reg.Value = hw_priv->link->io.BasePort1 & 0x00ff;
|
||||
res = pcmcia_access_configuration_register(hw_priv->link->handle,
|
||||
res = pcmcia_access_configuration_register(hw_priv->link,
|
||||
®);
|
||||
if (res != CS_SUCCESS) {
|
||||
printk(KERN_DEBUG "Prism3 SanDisk - failed to set I/O base 0 -"
|
||||
@ -249,7 +249,7 @@ static void sandisk_set_iobase(local_info_t *local)
|
||||
reg.Action = CS_WRITE;
|
||||
reg.Offset = 0x12; /* 0x3f2 IO base 2 */
|
||||
reg.Value = (hw_priv->link->io.BasePort1 & 0xff00) >> 8;
|
||||
res = pcmcia_access_configuration_register(hw_priv->link->handle,
|
||||
res = pcmcia_access_configuration_register(hw_priv->link,
|
||||
®);
|
||||
if (res != CS_SUCCESS) {
|
||||
printk(KERN_DEBUG "Prism3 SanDisk - failed to set I/O base 1 -"
|
||||
@ -301,9 +301,9 @@ static int sandisk_enable_wireless(struct net_device *dev)
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
if (pcmcia_get_first_tuple(hw_priv->link->handle, &tuple) ||
|
||||
pcmcia_get_tuple_data(hw_priv->link->handle, &tuple) ||
|
||||
pcmcia_parse_tuple(hw_priv->link->handle, &tuple, parse) ||
|
||||
if (pcmcia_get_first_tuple(hw_priv->link, &tuple) ||
|
||||
pcmcia_get_tuple_data(hw_priv->link, &tuple) ||
|
||||
pcmcia_parse_tuple(hw_priv->link, &tuple, parse) ||
|
||||
parse->manfid.manf != 0xd601 || parse->manfid.card != 0x0101) {
|
||||
/* No SanDisk manfid found */
|
||||
ret = -ENODEV;
|
||||
@ -311,9 +311,9 @@ static int sandisk_enable_wireless(struct net_device *dev)
|
||||
}
|
||||
|
||||
tuple.DesiredTuple = CISTPL_LONGLINK_MFC;
|
||||
if (pcmcia_get_first_tuple(hw_priv->link->handle, &tuple) ||
|
||||
pcmcia_get_tuple_data(hw_priv->link->handle, &tuple) ||
|
||||
pcmcia_parse_tuple(hw_priv->link->handle, &tuple, parse) ||
|
||||
if (pcmcia_get_first_tuple(hw_priv->link, &tuple) ||
|
||||
pcmcia_get_tuple_data(hw_priv->link, &tuple) ||
|
||||
pcmcia_parse_tuple(hw_priv->link, &tuple, parse) ||
|
||||
parse->longlink_mfc.nfn < 2) {
|
||||
/* No multi-function links found */
|
||||
ret = -ENODEV;
|
||||
@ -328,7 +328,7 @@ static int sandisk_enable_wireless(struct net_device *dev)
|
||||
reg.Action = CS_WRITE;
|
||||
reg.Offset = CISREG_COR;
|
||||
reg.Value = COR_SOFT_RESET;
|
||||
res = pcmcia_access_configuration_register(hw_priv->link->handle,
|
||||
res = pcmcia_access_configuration_register(hw_priv->link,
|
||||
®);
|
||||
if (res != CS_SUCCESS) {
|
||||
printk(KERN_DEBUG "%s: SanDisk - COR sreset failed (%d)\n",
|
||||
@ -345,7 +345,7 @@ static int sandisk_enable_wireless(struct net_device *dev)
|
||||
* will be enabled during the first cor_sreset call.
|
||||
*/
|
||||
reg.Value = COR_LEVEL_REQ | 0x8 | COR_ADDR_DECODE | COR_FUNC_ENA;
|
||||
res = pcmcia_access_configuration_register(hw_priv->link->handle,
|
||||
res = pcmcia_access_configuration_register(hw_priv->link,
|
||||
®);
|
||||
if (res != CS_SUCCESS) {
|
||||
printk(KERN_DEBUG "%s: SanDisk - COR sreset failed (%d)\n",
|
||||
@ -380,7 +380,7 @@ static void prism2_pccard_cor_sreset(local_info_t *local)
|
||||
reg.Action = CS_READ;
|
||||
reg.Offset = CISREG_COR;
|
||||
reg.Value = 0;
|
||||
res = pcmcia_access_configuration_register(hw_priv->link->handle,
|
||||
res = pcmcia_access_configuration_register(hw_priv->link,
|
||||
®);
|
||||
if (res != CS_SUCCESS) {
|
||||
printk(KERN_DEBUG "prism2_pccard_cor_sreset failed 1 (%d)\n",
|
||||
@ -392,7 +392,7 @@ static void prism2_pccard_cor_sreset(local_info_t *local)
|
||||
|
||||
reg.Action = CS_WRITE;
|
||||
reg.Value |= COR_SOFT_RESET;
|
||||
res = pcmcia_access_configuration_register(hw_priv->link->handle,
|
||||
res = pcmcia_access_configuration_register(hw_priv->link,
|
||||
®);
|
||||
if (res != CS_SUCCESS) {
|
||||
printk(KERN_DEBUG "prism2_pccard_cor_sreset failed 2 (%d)\n",
|
||||
@ -405,7 +405,7 @@ static void prism2_pccard_cor_sreset(local_info_t *local)
|
||||
reg.Value &= ~COR_SOFT_RESET;
|
||||
if (hw_priv->sandisk_connectplus)
|
||||
reg.Value |= COR_IREQ_ENA;
|
||||
res = pcmcia_access_configuration_register(hw_priv->link->handle,
|
||||
res = pcmcia_access_configuration_register(hw_priv->link,
|
||||
®);
|
||||
if (res != CS_SUCCESS) {
|
||||
printk(KERN_DEBUG "prism2_pccard_cor_sreset failed 3 (%d)\n",
|
||||
@ -439,7 +439,7 @@ static void prism2_pccard_genesis_reset(local_info_t *local, int hcr)
|
||||
reg.Action = CS_READ;
|
||||
reg.Offset = CISREG_COR;
|
||||
reg.Value = 0;
|
||||
res = pcmcia_access_configuration_register(hw_priv->link->handle,
|
||||
res = pcmcia_access_configuration_register(hw_priv->link,
|
||||
®);
|
||||
if (res != CS_SUCCESS) {
|
||||
printk(KERN_DEBUG "prism2_pccard_genesis_sreset failed 1 "
|
||||
@ -452,7 +452,7 @@ static void prism2_pccard_genesis_reset(local_info_t *local, int hcr)
|
||||
|
||||
reg.Action = CS_WRITE;
|
||||
reg.Value |= COR_SOFT_RESET;
|
||||
res = pcmcia_access_configuration_register(hw_priv->link->handle,
|
||||
res = pcmcia_access_configuration_register(hw_priv->link,
|
||||
®);
|
||||
if (res != CS_SUCCESS) {
|
||||
printk(KERN_DEBUG "prism2_pccard_genesis_sreset failed 2 "
|
||||
@ -466,7 +466,7 @@ static void prism2_pccard_genesis_reset(local_info_t *local, int hcr)
|
||||
reg.Action = CS_WRITE;
|
||||
reg.Value = hcr;
|
||||
reg.Offset = CISREG_CCSR;
|
||||
res = pcmcia_access_configuration_register(hw_priv->link->handle,
|
||||
res = pcmcia_access_configuration_register(hw_priv->link,
|
||||
®);
|
||||
if (res != CS_SUCCESS) {
|
||||
printk(KERN_DEBUG "prism2_pccard_genesis_sreset failed 3 "
|
||||
@ -478,7 +478,7 @@ static void prism2_pccard_genesis_reset(local_info_t *local, int hcr)
|
||||
reg.Action = CS_WRITE;
|
||||
reg.Offset = CISREG_COR;
|
||||
reg.Value = old_cor & ~COR_SOFT_RESET;
|
||||
res = pcmcia_access_configuration_register(hw_priv->link->handle,
|
||||
res = pcmcia_access_configuration_register(hw_priv->link,
|
||||
®);
|
||||
if (res != CS_SUCCESS) {
|
||||
printk(KERN_DEBUG "prism2_pccard_genesis_sreset failed 4 "
|
||||
@ -514,10 +514,8 @@ static int prism2_attach(struct pcmcia_device *p_dev)
|
||||
}
|
||||
|
||||
|
||||
static void prism2_detach(struct pcmcia_device *p_dev)
|
||||
static void prism2_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
PDEBUG(DEBUG_FLOW, "prism2_detach\n");
|
||||
|
||||
if (link->state & DEV_CONFIG) {
|
||||
@ -545,7 +543,7 @@ do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
do { int ret = (retf); \
|
||||
if (ret != 0) { \
|
||||
PDEBUG(DEBUG_EXTRA, "CardServices(" #fn ") returned %d\n", ret); \
|
||||
cs_error(link->handle, fn, ret); \
|
||||
cs_error(link, fn, ret); \
|
||||
goto next_entry; \
|
||||
} \
|
||||
} while (0)
|
||||
@ -553,7 +551,7 @@ if (ret != 0) { \
|
||||
|
||||
/* run after a CARD_INSERTION event is received to configure the PCMCIA
|
||||
* socket and make the device available to the system */
|
||||
static int prism2_config(dev_link_t *link)
|
||||
static int prism2_config(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev;
|
||||
struct hostap_interface *iface;
|
||||
@ -582,24 +580,24 @@ static int prism2_config(dev_link_t *link)
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link->handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link->handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link->handle, &tuple, parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, parse));
|
||||
link->conf.ConfigBase = parse->config.base;
|
||||
link->conf.Present = parse->config.rmask[0];
|
||||
|
||||
CS_CHECK(GetConfigurationInfo,
|
||||
pcmcia_get_configuration_info(link->handle, &conf));
|
||||
pcmcia_get_configuration_info(link, &conf));
|
||||
|
||||
/* Look for an appropriate configuration table entry in the CIS */
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link->handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
for (;;) {
|
||||
cistpl_cftable_entry_t *cfg = &(parse->cftable_entry);
|
||||
CFG_CHECK2(GetTupleData,
|
||||
pcmcia_get_tuple_data(link->handle, &tuple));
|
||||
pcmcia_get_tuple_data(link, &tuple));
|
||||
CFG_CHECK2(ParseTuple,
|
||||
pcmcia_parse_tuple(link->handle, &tuple, parse));
|
||||
pcmcia_parse_tuple(link, &tuple, parse));
|
||||
|
||||
if (cfg->flags & CISTPL_CFTABLE_DEFAULT)
|
||||
dflt = *cfg;
|
||||
@ -679,19 +677,19 @@ static int prism2_config(dev_link_t *link)
|
||||
|
||||
/* This reserves IO space but doesn't actually enable it */
|
||||
CFG_CHECK2(RequestIO,
|
||||
pcmcia_request_io(link->handle, &link->io));
|
||||
pcmcia_request_io(link, &link->io));
|
||||
|
||||
/* This configuration table entry is OK */
|
||||
break;
|
||||
|
||||
next_entry:
|
||||
CS_CHECK(GetNextTuple,
|
||||
pcmcia_get_next_tuple(link->handle, &tuple));
|
||||
pcmcia_get_next_tuple(link, &tuple));
|
||||
}
|
||||
|
||||
/* Need to allocate net_device before requesting IRQ handler */
|
||||
dev = prism2_init_local_data(&prism2_pccard_funcs, 0,
|
||||
&handle_to_dev(link->handle));
|
||||
&handle_to_dev(link));
|
||||
if (dev == NULL)
|
||||
goto failed;
|
||||
link->priv = dev;
|
||||
@ -714,7 +712,7 @@ static int prism2_config(dev_link_t *link)
|
||||
link->irq.Handler = prism2_interrupt;
|
||||
link->irq.Instance = dev;
|
||||
CS_CHECK(RequestIRQ,
|
||||
pcmcia_request_irq(link->handle, &link->irq));
|
||||
pcmcia_request_irq(link, &link->irq));
|
||||
}
|
||||
|
||||
/*
|
||||
@ -723,7 +721,7 @@ static int prism2_config(dev_link_t *link)
|
||||
* card and host interface into "Memory and IO" mode.
|
||||
*/
|
||||
CS_CHECK(RequestConfiguration,
|
||||
pcmcia_request_configuration(link->handle, &link->conf));
|
||||
pcmcia_request_configuration(link, &link->conf));
|
||||
|
||||
dev->irq = link->irq.AssignedIRQ;
|
||||
dev->base_addr = link->io.BasePort1;
|
||||
@ -761,7 +759,7 @@ static int prism2_config(dev_link_t *link)
|
||||
return ret;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
|
||||
failed:
|
||||
kfree(parse);
|
||||
@ -773,7 +771,7 @@ static int prism2_config(dev_link_t *link)
|
||||
|
||||
static void prism2_release(u_long arg)
|
||||
{
|
||||
dev_link_t *link = (dev_link_t *)arg;
|
||||
struct pcmcia_device *link = (struct pcmcia_device *)arg;
|
||||
|
||||
PDEBUG(DEBUG_FLOW, "prism2_release\n");
|
||||
|
||||
@ -787,13 +785,12 @@ static void prism2_release(u_long arg)
|
||||
iface->local->shutdown = 1;
|
||||
}
|
||||
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
PDEBUG(DEBUG_FLOW, "release - done\n");
|
||||
}
|
||||
|
||||
static int hostap_cs_suspend(struct pcmcia_device *p_dev)
|
||||
static int hostap_cs_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = (struct net_device *) link->priv;
|
||||
int dev_open = 0;
|
||||
|
||||
@ -813,9 +810,8 @@ static int hostap_cs_suspend(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int hostap_cs_resume(struct pcmcia_device *p_dev)
|
||||
static int hostap_cs_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = (struct net_device *) link->priv;
|
||||
int dev_open = 0;
|
||||
|
||||
|
@ -190,8 +190,8 @@ module_param(mem_speed, int, 0);
|
||||
/*====================================================================*/
|
||||
|
||||
/* PCMCIA (Card Services) related functions */
|
||||
static void netwave_release(dev_link_t *link); /* Card removal */
|
||||
static void netwave_pcmcia_config(dev_link_t *arg); /* Runs after card
|
||||
static void netwave_release(struct pcmcia_device *link); /* Card removal */
|
||||
static void netwave_pcmcia_config(struct pcmcia_device *arg); /* Runs after card
|
||||
insertion */
|
||||
static void netwave_detach(struct pcmcia_device *p_dev); /* Destroy instance */
|
||||
|
||||
@ -221,10 +221,10 @@ static struct iw_statistics* netwave_get_wireless_stats(struct net_device *dev);
|
||||
static void set_multicast_list(struct net_device *dev);
|
||||
|
||||
/*
|
||||
A dev_link_t structure has fields for most things that are needed
|
||||
A struct pcmcia_device structure has fields for most things that are needed
|
||||
to keep track of a socket, but there will usually be some device
|
||||
specific information that also needs to be kept track of. The
|
||||
'priv' pointer in a dev_link_t structure can be used to point to
|
||||
'priv' pointer in a struct pcmcia_device structure can be used to point to
|
||||
a device-specific private data structure, like this.
|
||||
|
||||
A driver needs to provide a dev_node_t structure for each device
|
||||
@ -232,7 +232,7 @@ static void set_multicast_list(struct net_device *dev);
|
||||
example, ethernet cards, modems). In other cases, there may be
|
||||
many actual or logical devices (SCSI adapters, memory cards with
|
||||
multiple partitions). The dev_node_t structures need to be kept
|
||||
in a linked list starting at the 'dev' field of a dev_link_t
|
||||
in a linked list starting at the 'dev' field of a struct pcmcia_device
|
||||
structure. We allocate them in the card's private data structure,
|
||||
because they generally can't be allocated dynamically.
|
||||
*/
|
||||
@ -376,20 +376,19 @@ static struct iw_statistics *netwave_get_wireless_stats(struct net_device *dev)
|
||||
* configure the card at this point -- we wait until we receive a
|
||||
* card insertion event.
|
||||
*/
|
||||
static int netwave_attach(struct pcmcia_device *p_dev)
|
||||
static int netwave_attach(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev;
|
||||
netwave_private *priv;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "netwave_attach()\n");
|
||||
|
||||
/* Initialize the dev_link_t structure */
|
||||
/* Initialize the struct pcmcia_device structure */
|
||||
dev = alloc_etherdev(sizeof(netwave_private));
|
||||
if (!dev)
|
||||
return -ENOMEM;
|
||||
priv = netdev_priv(dev);
|
||||
priv->p_dev = p_dev;
|
||||
priv->p_dev = link;
|
||||
link->priv = dev;
|
||||
|
||||
/* The io structure describes IO port mapping */
|
||||
@ -443,9 +442,8 @@ static int netwave_attach(struct pcmcia_device *p_dev)
|
||||
* structures are freed. Otherwise, the structures will be freed
|
||||
* when the device is released.
|
||||
*/
|
||||
static void netwave_detach(struct pcmcia_device *p_dev)
|
||||
static void netwave_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
DEBUG(0, "netwave_detach(0x%p)\n", link);
|
||||
@ -739,8 +737,7 @@ static const struct iw_handler_def netwave_handler_def =
|
||||
#define CS_CHECK(fn, ret) \
|
||||
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
|
||||
static void netwave_pcmcia_config(dev_link_t *link) {
|
||||
client_handle_t handle = link->handle;
|
||||
static void netwave_pcmcia_config(struct pcmcia_device *link) {
|
||||
struct net_device *dev = link->priv;
|
||||
netwave_private *priv = netdev_priv(dev);
|
||||
tuple_t tuple;
|
||||
@ -762,9 +759,9 @@ static void netwave_pcmcia_config(dev_link_t *link) {
|
||||
tuple.TupleDataMax = 64;
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
@ -778,11 +775,11 @@ static void netwave_pcmcia_config(dev_link_t *link) {
|
||||
*/
|
||||
for (i = j = 0x0; j < 0x400; j += 0x20) {
|
||||
link->io.BasePort1 = j ^ 0x300;
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS) break;
|
||||
}
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestIO, i);
|
||||
cs_error(link, RequestIO, i);
|
||||
goto failed;
|
||||
}
|
||||
|
||||
@ -790,16 +787,16 @@ static void netwave_pcmcia_config(dev_link_t *link) {
|
||||
* Now allocate an interrupt line. Note that this does not
|
||||
* actually assign a handler to the interrupt.
|
||||
*/
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(handle, &link->irq));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
|
||||
/*
|
||||
* This actually configures the PCMCIA socket -- setting up
|
||||
* the I/O windows and the interrupt mapping.
|
||||
*/
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(handle, &link->conf));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
|
||||
/*
|
||||
* Allocate a 32K memory window. Note that the dev_link_t
|
||||
* Allocate a 32K memory window. Note that the struct pcmcia_device
|
||||
* structure provides space for one window handle -- if your
|
||||
* device needs several windows, you'll need to keep track of
|
||||
* the handles in your private data structure, dev->priv.
|
||||
@ -809,7 +806,7 @@ static void netwave_pcmcia_config(dev_link_t *link) {
|
||||
req.Attributes = WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_CM|WIN_ENABLE;
|
||||
req.Base = 0; req.Size = 0x8000;
|
||||
req.AccessSpeed = mem_speed;
|
||||
CS_CHECK(RequestWindow, pcmcia_request_window(&link->handle, &req, &link->win));
|
||||
CS_CHECK(RequestWindow, pcmcia_request_window(&link, &req, &link->win));
|
||||
mem.CardOffset = 0x20000; mem.Page = 0;
|
||||
CS_CHECK(MapMemPage, pcmcia_map_mem_page(link->win, &mem));
|
||||
|
||||
@ -819,7 +816,7 @@ static void netwave_pcmcia_config(dev_link_t *link) {
|
||||
|
||||
dev->irq = link->irq.AssignedIRQ;
|
||||
dev->base_addr = link->io.BasePort1;
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(handle));
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(link));
|
||||
|
||||
if (register_netdev(dev) != 0) {
|
||||
printk(KERN_DEBUG "netwave_cs: register_netdev() failed\n");
|
||||
@ -851,7 +848,7 @@ static void netwave_pcmcia_config(dev_link_t *link) {
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
failed:
|
||||
netwave_release(link);
|
||||
} /* netwave_pcmcia_config */
|
||||
@ -863,21 +860,20 @@ failed:
|
||||
* device, and release the PCMCIA configuration. If the device is
|
||||
* still open, this will be postponed until it is closed.
|
||||
*/
|
||||
static void netwave_release(dev_link_t *link)
|
||||
static void netwave_release(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev = link->priv;
|
||||
netwave_private *priv = netdev_priv(dev);
|
||||
|
||||
DEBUG(0, "netwave_release(0x%p)\n", link);
|
||||
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
if (link->win)
|
||||
iounmap(priv->ramBase);
|
||||
}
|
||||
|
||||
static int netwave_suspend(struct pcmcia_device *p_dev)
|
||||
static int netwave_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
if ((link->state & DEV_CONFIG) && (link->open))
|
||||
@ -886,9 +882,8 @@ static int netwave_suspend(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int netwave_resume(struct pcmcia_device *p_dev)
|
||||
static int netwave_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
if ((link->state & DEV_CONFIG) && (link->open)) {
|
||||
@ -1100,7 +1095,7 @@ static irqreturn_t netwave_interrupt(int irq, void* dev_id, struct pt_regs *regs
|
||||
u_char __iomem *ramBase;
|
||||
struct net_device *dev = (struct net_device *)dev_id;
|
||||
struct netwave_private *priv = netdev_priv(dev);
|
||||
dev_link_t *link = priv->p_dev;
|
||||
struct pcmcia_device *link = priv->p_dev;
|
||||
int i;
|
||||
|
||||
if (!netif_device_present(dev))
|
||||
@ -1354,7 +1349,7 @@ static int netwave_rx(struct net_device *dev)
|
||||
|
||||
static int netwave_open(struct net_device *dev) {
|
||||
netwave_private *priv = netdev_priv(dev);
|
||||
dev_link_t *link = priv->p_dev;
|
||||
struct pcmcia_device *link = priv->p_dev;
|
||||
|
||||
DEBUG(1, "netwave_open: starting.\n");
|
||||
|
||||
@ -1371,7 +1366,7 @@ static int netwave_open(struct net_device *dev) {
|
||||
|
||||
static int netwave_close(struct net_device *dev) {
|
||||
netwave_private *priv = netdev_priv(dev);
|
||||
dev_link_t *link = priv->p_dev;
|
||||
struct pcmcia_device *link = priv->p_dev;
|
||||
|
||||
DEBUG(1, "netwave_close: finishing.\n");
|
||||
|
||||
|
@ -63,8 +63,8 @@ struct orinoco_pccard {
|
||||
/* Function prototypes */
|
||||
/********************************************************************/
|
||||
|
||||
static void orinoco_cs_config(dev_link_t *link);
|
||||
static void orinoco_cs_release(dev_link_t *link);
|
||||
static void orinoco_cs_config(struct pcmcia_device *link);
|
||||
static void orinoco_cs_release(struct pcmcia_device *link);
|
||||
static void orinoco_cs_detach(struct pcmcia_device *p_dev);
|
||||
|
||||
/********************************************************************/
|
||||
@ -75,13 +75,13 @@ static int
|
||||
orinoco_cs_hard_reset(struct orinoco_private *priv)
|
||||
{
|
||||
struct orinoco_pccard *card = priv->card;
|
||||
dev_link_t *link = card->p_dev;
|
||||
struct pcmcia_device *link = card->p_dev;
|
||||
int err;
|
||||
|
||||
/* We need atomic ops here, because we're not holding the lock */
|
||||
set_bit(0, &card->hard_reset_in_progress);
|
||||
|
||||
err = pcmcia_reset_card(link->handle, NULL);
|
||||
err = pcmcia_reset_card(link, NULL);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
@ -104,12 +104,11 @@ orinoco_cs_hard_reset(struct orinoco_private *priv)
|
||||
* configure the card at this point -- we wait until we receive a card
|
||||
* insertion event. */
|
||||
static int
|
||||
orinoco_cs_attach(struct pcmcia_device *p_dev)
|
||||
orinoco_cs_attach(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev;
|
||||
struct orinoco_private *priv;
|
||||
struct orinoco_pccard *card;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
dev = alloc_orinocodev(sizeof(*card), orinoco_cs_hard_reset);
|
||||
if (! dev)
|
||||
@ -118,7 +117,7 @@ orinoco_cs_attach(struct pcmcia_device *p_dev)
|
||||
card = priv->card;
|
||||
|
||||
/* Link both structures together */
|
||||
card->p_dev = p_dev;
|
||||
card->p_dev = link;
|
||||
link->priv = dev;
|
||||
|
||||
/* Interrupt setup */
|
||||
@ -147,9 +146,8 @@ orinoco_cs_attach(struct pcmcia_device *p_dev)
|
||||
* are freed. Otherwise, the structures will be freed when the device
|
||||
* is released.
|
||||
*/
|
||||
static void orinoco_cs_detach(struct pcmcia_device *p_dev)
|
||||
static void orinoco_cs_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
if (link->state & DEV_CONFIG)
|
||||
@ -175,10 +173,9 @@ static void orinoco_cs_detach(struct pcmcia_device *p_dev)
|
||||
} while (0)
|
||||
|
||||
static void
|
||||
orinoco_cs_config(dev_link_t *link)
|
||||
orinoco_cs_config(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev = link->priv;
|
||||
client_handle_t handle = link->handle;
|
||||
struct orinoco_private *priv = netdev_priv(dev);
|
||||
struct orinoco_pccard *card = priv->card;
|
||||
hermes_t *hw = &priv->hw;
|
||||
@ -190,7 +187,7 @@ orinoco_cs_config(dev_link_t *link)
|
||||
cisparse_t parse;
|
||||
void __iomem *mem;
|
||||
|
||||
CS_CHECK(ValidateCIS, pcmcia_validate_cis(handle, &info));
|
||||
CS_CHECK(ValidateCIS, pcmcia_validate_cis(link, &info));
|
||||
|
||||
/*
|
||||
* This reads the card's CONFIG tuple to find its
|
||||
@ -201,9 +198,9 @@ orinoco_cs_config(dev_link_t *link)
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
@ -212,7 +209,7 @@ orinoco_cs_config(dev_link_t *link)
|
||||
|
||||
/* Look up the current Vcc */
|
||||
CS_CHECK(GetConfigurationInfo,
|
||||
pcmcia_get_configuration_info(link->handle, &conf));
|
||||
pcmcia_get_configuration_info(link, &conf));
|
||||
|
||||
/*
|
||||
* In this loop, we scan the CIS for configuration table
|
||||
@ -229,13 +226,13 @@ orinoco_cs_config(dev_link_t *link)
|
||||
* implementation-defined details.
|
||||
*/
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
while (1) {
|
||||
cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
|
||||
cistpl_cftable_entry_t dflt = { .index = 0 };
|
||||
|
||||
if ( (pcmcia_get_tuple_data(handle, &tuple) != 0)
|
||||
|| (pcmcia_parse_tuple(handle, &tuple, &parse) != 0))
|
||||
if ( (pcmcia_get_tuple_data(link, &tuple) != 0)
|
||||
|| (pcmcia_parse_tuple(link, &tuple, &parse) != 0))
|
||||
goto next_entry;
|
||||
|
||||
if (cfg->flags & CISTPL_CFTABLE_DEFAULT)
|
||||
@ -300,7 +297,7 @@ orinoco_cs_config(dev_link_t *link)
|
||||
}
|
||||
|
||||
/* This reserves IO space but doesn't actually enable it */
|
||||
if (pcmcia_request_io(link->handle, &link->io) != 0)
|
||||
if (pcmcia_request_io(link, &link->io) != 0)
|
||||
goto next_entry;
|
||||
}
|
||||
|
||||
@ -310,8 +307,8 @@ orinoco_cs_config(dev_link_t *link)
|
||||
break;
|
||||
|
||||
next_entry:
|
||||
pcmcia_disable_device(handle);
|
||||
last_ret = pcmcia_get_next_tuple(handle, &tuple);
|
||||
pcmcia_disable_device(link);
|
||||
last_ret = pcmcia_get_next_tuple(link, &tuple);
|
||||
if (last_ret == CS_NO_MORE_ITEMS) {
|
||||
printk(KERN_ERR PFX "GetNextTuple(): No matching "
|
||||
"CIS configuration. Maybe you need the "
|
||||
@ -325,7 +322,7 @@ orinoco_cs_config(dev_link_t *link)
|
||||
* a handler to the interrupt, unless the 'Handler' member of
|
||||
* the irq structure is initialized.
|
||||
*/
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link->handle, &link->irq));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
|
||||
/* We initialize the hermes structure before completing PCMCIA
|
||||
* configuration just in case the interrupt handler gets
|
||||
@ -342,7 +339,7 @@ orinoco_cs_config(dev_link_t *link)
|
||||
* card and host interface into "Memory and IO" mode.
|
||||
*/
|
||||
CS_CHECK(RequestConfiguration,
|
||||
pcmcia_request_configuration(link->handle, &link->conf));
|
||||
pcmcia_request_configuration(link, &link->conf));
|
||||
|
||||
/* Ok, we have the configuration, prepare to register the netdev */
|
||||
dev->base_addr = link->io.BasePort1;
|
||||
@ -350,7 +347,7 @@ orinoco_cs_config(dev_link_t *link)
|
||||
SET_MODULE_OWNER(dev);
|
||||
card->node.major = card->node.minor = 0;
|
||||
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(handle));
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(link));
|
||||
/* Tell the stack we exist */
|
||||
if (register_netdev(dev) != 0) {
|
||||
printk(KERN_ERR PFX "register_netdev() failed\n");
|
||||
@ -383,7 +380,7 @@ orinoco_cs_config(dev_link_t *link)
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
|
||||
failed:
|
||||
orinoco_cs_release(link);
|
||||
@ -395,7 +392,7 @@ orinoco_cs_config(dev_link_t *link)
|
||||
* still open, this will be postponed until it is closed.
|
||||
*/
|
||||
static void
|
||||
orinoco_cs_release(dev_link_t *link)
|
||||
orinoco_cs_release(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev = link->priv;
|
||||
struct orinoco_private *priv = netdev_priv(dev);
|
||||
@ -407,14 +404,13 @@ orinoco_cs_release(dev_link_t *link)
|
||||
priv->hw_unavailable++;
|
||||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
if (priv->hw.iobase)
|
||||
ioport_unmap(priv->hw.iobase);
|
||||
} /* orinoco_cs_release */
|
||||
|
||||
static int orinoco_cs_suspend(struct pcmcia_device *p_dev)
|
||||
static int orinoco_cs_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
struct orinoco_private *priv = netdev_priv(dev);
|
||||
struct orinoco_pccard *card = priv->card;
|
||||
@ -443,9 +439,8 @@ static int orinoco_cs_suspend(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int orinoco_cs_resume(struct pcmcia_device *p_dev)
|
||||
static int orinoco_cs_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
struct orinoco_private *priv = netdev_priv(dev);
|
||||
struct orinoco_pccard *card = priv->card;
|
||||
|
@ -90,8 +90,8 @@ module_param(pc_debug, int, 0);
|
||||
#define DEBUG(n, args...)
|
||||
#endif
|
||||
/** Prototypes based on PCMCIA skeleton driver *******************************/
|
||||
static void ray_config(dev_link_t *link);
|
||||
static void ray_release(dev_link_t *link);
|
||||
static void ray_config(struct pcmcia_device *link);
|
||||
static void ray_release(struct pcmcia_device *link);
|
||||
static void ray_detach(struct pcmcia_device *p_dev);
|
||||
|
||||
/***** Prototypes indicated by device structure ******************************/
|
||||
@ -190,10 +190,10 @@ static int bc;
|
||||
static char *phy_addr = NULL;
|
||||
|
||||
|
||||
/* A dev_link_t structure has fields for most things that are needed
|
||||
/* A struct pcmcia_device structure has fields for most things that are needed
|
||||
to keep track of a socket, but there will usually be some device
|
||||
specific information that also needs to be kept track of. The
|
||||
'priv' pointer in a dev_link_t structure can be used to point to
|
||||
'priv' pointer in a struct pcmcia_device structure can be used to point to
|
||||
a device-specific private data structure, like this.
|
||||
*/
|
||||
static unsigned int ray_mem_speed = 500;
|
||||
@ -381,9 +381,8 @@ fail_alloc_dev:
|
||||
structures are freed. Otherwise, the structures will be freed
|
||||
when the device is released.
|
||||
=============================================================================*/
|
||||
static void ray_detach(struct pcmcia_device *p_dev)
|
||||
static void ray_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev;
|
||||
ray_dev_t *local;
|
||||
|
||||
@ -413,9 +412,8 @@ static void ray_detach(struct pcmcia_device *p_dev)
|
||||
#define CS_CHECK(fn, ret) \
|
||||
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
#define MAX_TUPLE_SIZE 128
|
||||
static void ray_config(dev_link_t *link)
|
||||
static void ray_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
int last_fn = 0, last_ret = 0;
|
||||
@ -430,23 +428,23 @@ static void ray_config(dev_link_t *link)
|
||||
|
||||
/* This reads the card's CONFIG tuple to find its configuration regs */
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = MAX_TUPLE_SIZE;
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
/* Determine card type and firmware version */
|
||||
buf[0] = buf[MAX_TUPLE_SIZE - 1] = 0;
|
||||
tuple.DesiredTuple = CISTPL_VERS_1;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = MAX_TUPLE_SIZE;
|
||||
tuple.TupleOffset = 2;
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
|
||||
for (i=0; i<tuple.TupleDataLen - 4; i++)
|
||||
if (buf[i] == 0) buf[i] = ' ';
|
||||
@ -458,20 +456,20 @@ static void ray_config(dev_link_t *link)
|
||||
/* Now allocate an interrupt line. Note that this does not
|
||||
actually assign a handler to the interrupt.
|
||||
*/
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link->handle, &link->irq));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
dev->irq = link->irq.AssignedIRQ;
|
||||
|
||||
/* This actually configures the PCMCIA socket -- setting up
|
||||
the I/O windows and the interrupt mapping.
|
||||
*/
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link->handle, &link->conf));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
|
||||
/*** Set up 32k window for shared memory (transmit and control) ************/
|
||||
req.Attributes = WIN_DATA_WIDTH_8 | WIN_MEMORY_TYPE_CM | WIN_ENABLE | WIN_USE_WAIT;
|
||||
req.Base = 0;
|
||||
req.Size = 0x8000;
|
||||
req.AccessSpeed = ray_mem_speed;
|
||||
CS_CHECK(RequestWindow, pcmcia_request_window(&link->handle, &req, &link->win));
|
||||
CS_CHECK(RequestWindow, pcmcia_request_window(&link, &req, &link->win));
|
||||
mem.CardOffset = 0x0000; mem.Page = 0;
|
||||
CS_CHECK(MapMemPage, pcmcia_map_mem_page(link->win, &mem));
|
||||
local->sram = ioremap(req.Base,req.Size);
|
||||
@ -481,7 +479,7 @@ static void ray_config(dev_link_t *link)
|
||||
req.Base = 0;
|
||||
req.Size = 0x4000;
|
||||
req.AccessSpeed = ray_mem_speed;
|
||||
CS_CHECK(RequestWindow, pcmcia_request_window(&link->handle, &req, &local->rmem_handle));
|
||||
CS_CHECK(RequestWindow, pcmcia_request_window(&link, &req, &local->rmem_handle));
|
||||
mem.CardOffset = 0x8000; mem.Page = 0;
|
||||
CS_CHECK(MapMemPage, pcmcia_map_mem_page(local->rmem_handle, &mem));
|
||||
local->rmem = ioremap(req.Base,req.Size);
|
||||
@ -491,7 +489,7 @@ static void ray_config(dev_link_t *link)
|
||||
req.Base = 0;
|
||||
req.Size = 0x1000;
|
||||
req.AccessSpeed = ray_mem_speed;
|
||||
CS_CHECK(RequestWindow, pcmcia_request_window(&link->handle, &req, &local->amem_handle));
|
||||
CS_CHECK(RequestWindow, pcmcia_request_window(&link, &req, &local->amem_handle));
|
||||
mem.CardOffset = 0x0000; mem.Page = 0;
|
||||
CS_CHECK(MapMemPage, pcmcia_map_mem_page(local->amem_handle, &mem));
|
||||
local->amem = ioremap(req.Base,req.Size);
|
||||
@ -504,7 +502,7 @@ static void ray_config(dev_link_t *link)
|
||||
return;
|
||||
}
|
||||
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(handle));
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(link));
|
||||
i = register_netdev(dev);
|
||||
if (i != 0) {
|
||||
printk("ray_config register_netdev() failed\n");
|
||||
@ -524,7 +522,7 @@ static void ray_config(dev_link_t *link)
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
|
||||
ray_release(link);
|
||||
} /* ray_config */
|
||||
@ -553,7 +551,7 @@ static int ray_init(struct net_device *dev)
|
||||
UCHAR *p;
|
||||
struct ccs __iomem *pccs;
|
||||
ray_dev_t *local = (ray_dev_t *)dev->priv;
|
||||
dev_link_t *link = local->finder;
|
||||
struct pcmcia_device *link = local->finder;
|
||||
DEBUG(1, "ray_init(0x%p)\n", dev);
|
||||
if (!(link->state & DEV_PRESENT)) {
|
||||
DEBUG(0,"ray_init - device not present\n");
|
||||
@ -615,7 +613,7 @@ static int dl_startup_params(struct net_device *dev)
|
||||
int ccsindex;
|
||||
ray_dev_t *local = (ray_dev_t *)dev->priv;
|
||||
struct ccs __iomem *pccs;
|
||||
dev_link_t *link = local->finder;
|
||||
struct pcmcia_device *link = local->finder;
|
||||
|
||||
DEBUG(1,"dl_startup_params entered\n");
|
||||
if (!(link->state & DEV_PRESENT)) {
|
||||
@ -722,7 +720,7 @@ static void verify_dl_startup(u_long data)
|
||||
ray_dev_t *local = (ray_dev_t *)data;
|
||||
struct ccs __iomem *pccs = ccs_base(local) + local->dl_param_ccs;
|
||||
UCHAR status;
|
||||
dev_link_t *link = local->finder;
|
||||
struct pcmcia_device *link = local->finder;
|
||||
|
||||
if (!(link->state & DEV_PRESENT)) {
|
||||
DEBUG(2,"ray_cs verify_dl_startup - device not present\n");
|
||||
@ -762,7 +760,7 @@ static void start_net(u_long data)
|
||||
ray_dev_t *local = (ray_dev_t *)data;
|
||||
struct ccs __iomem *pccs;
|
||||
int ccsindex;
|
||||
dev_link_t *link = local->finder;
|
||||
struct pcmcia_device *link = local->finder;
|
||||
if (!(link->state & DEV_PRESENT)) {
|
||||
DEBUG(2,"ray_cs start_net - device not present\n");
|
||||
return;
|
||||
@ -789,7 +787,7 @@ static void join_net(u_long data)
|
||||
|
||||
struct ccs __iomem *pccs;
|
||||
int ccsindex;
|
||||
dev_link_t *link = local->finder;
|
||||
struct pcmcia_device *link = local->finder;
|
||||
|
||||
if (!(link->state & DEV_PRESENT)) {
|
||||
DEBUG(2,"ray_cs join_net - device not present\n");
|
||||
@ -815,7 +813,7 @@ static void join_net(u_long data)
|
||||
device, and release the PCMCIA configuration. If the device is
|
||||
still open, this will be postponed until it is closed.
|
||||
=============================================================================*/
|
||||
static void ray_release(dev_link_t *link)
|
||||
static void ray_release(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev = link->priv;
|
||||
ray_dev_t *local = dev->priv;
|
||||
@ -833,14 +831,13 @@ static void ray_release(dev_link_t *link)
|
||||
if ( i != CS_SUCCESS ) DEBUG(0,"ReleaseWindow(local->amem) ret = %x\n",i);
|
||||
i = pcmcia_release_window(local->rmem_handle);
|
||||
if ( i != CS_SUCCESS ) DEBUG(0,"ReleaseWindow(local->rmem) ret = %x\n",i);
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
|
||||
DEBUG(2,"ray_release ending\n");
|
||||
}
|
||||
|
||||
static int ray_suspend(struct pcmcia_device *p_dev)
|
||||
static int ray_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
if ((link->state & DEV_CONFIG) && (link->open))
|
||||
@ -849,9 +846,8 @@ static int ray_suspend(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ray_resume(struct pcmcia_device *p_dev)
|
||||
static int ray_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
if ((link->state & DEV_CONFIG) && (link->open)) {
|
||||
@ -869,7 +865,7 @@ int ray_dev_init(struct net_device *dev)
|
||||
int i;
|
||||
#endif /* RAY_IMMEDIATE_INIT */
|
||||
ray_dev_t *local = dev->priv;
|
||||
dev_link_t *link = local->finder;
|
||||
struct pcmcia_device *link = local->finder;
|
||||
|
||||
DEBUG(1,"ray_dev_init(dev=%p)\n",dev);
|
||||
if (!(link->state & DEV_PRESENT)) {
|
||||
@ -903,7 +899,7 @@ int ray_dev_init(struct net_device *dev)
|
||||
static int ray_dev_config(struct net_device *dev, struct ifmap *map)
|
||||
{
|
||||
ray_dev_t *local = dev->priv;
|
||||
dev_link_t *link = local->finder;
|
||||
struct pcmcia_device *link = local->finder;
|
||||
/* Dummy routine to satisfy device structure */
|
||||
DEBUG(1,"ray_dev_config(dev=%p,ifmap=%p)\n",dev,map);
|
||||
if (!(link->state & DEV_PRESENT)) {
|
||||
@ -917,7 +913,7 @@ static int ray_dev_config(struct net_device *dev, struct ifmap *map)
|
||||
static int ray_dev_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
{
|
||||
ray_dev_t *local = dev->priv;
|
||||
dev_link_t *link = local->finder;
|
||||
struct pcmcia_device *link = local->finder;
|
||||
short length = skb->len;
|
||||
|
||||
if (!(link->state & DEV_PRESENT)) {
|
||||
@ -1529,7 +1525,7 @@ static int ray_commit(struct net_device *dev,
|
||||
static iw_stats * ray_get_wireless_stats(struct net_device * dev)
|
||||
{
|
||||
ray_dev_t * local = (ray_dev_t *) dev->priv;
|
||||
dev_link_t *link = local->finder;
|
||||
struct pcmcia_device *link = local->finder;
|
||||
struct status __iomem *p = local->sram + STATUS_BASE;
|
||||
|
||||
if(local == (ray_dev_t *) NULL)
|
||||
@ -1617,7 +1613,7 @@ static const struct iw_handler_def ray_handler_def =
|
||||
static int ray_open(struct net_device *dev)
|
||||
{
|
||||
ray_dev_t *local = (ray_dev_t *)dev->priv;
|
||||
dev_link_t *link;
|
||||
struct pcmcia_device *link;
|
||||
link = local->finder;
|
||||
|
||||
DEBUG(1, "ray_open('%s')\n", dev->name);
|
||||
@ -1651,7 +1647,7 @@ static int ray_open(struct net_device *dev)
|
||||
static int ray_dev_close(struct net_device *dev)
|
||||
{
|
||||
ray_dev_t *local = (ray_dev_t *)dev->priv;
|
||||
dev_link_t *link;
|
||||
struct pcmcia_device *link;
|
||||
link = local->finder;
|
||||
|
||||
DEBUG(1, "ray_dev_close('%s')\n", dev->name);
|
||||
@ -1677,7 +1673,7 @@ static void ray_reset(struct net_device *dev) {
|
||||
static int interrupt_ecf(ray_dev_t *local, int ccs)
|
||||
{
|
||||
int i = 50;
|
||||
dev_link_t *link = local->finder;
|
||||
struct pcmcia_device *link = local->finder;
|
||||
|
||||
if (!(link->state & DEV_PRESENT)) {
|
||||
DEBUG(2,"ray_cs interrupt_ecf - device not present\n");
|
||||
@ -1704,7 +1700,7 @@ static int get_free_tx_ccs(ray_dev_t *local)
|
||||
{
|
||||
int i;
|
||||
struct ccs __iomem *pccs = ccs_base(local);
|
||||
dev_link_t *link = local->finder;
|
||||
struct pcmcia_device *link = local->finder;
|
||||
|
||||
if (!(link->state & DEV_PRESENT)) {
|
||||
DEBUG(2,"ray_cs get_free_tx_ccs - device not present\n");
|
||||
@ -1735,7 +1731,7 @@ static int get_free_ccs(ray_dev_t *local)
|
||||
{
|
||||
int i;
|
||||
struct ccs __iomem *pccs = ccs_base(local);
|
||||
dev_link_t *link = local->finder;
|
||||
struct pcmcia_device *link = local->finder;
|
||||
|
||||
if (!(link->state & DEV_PRESENT)) {
|
||||
DEBUG(2,"ray_cs get_free_ccs - device not present\n");
|
||||
@ -1810,7 +1806,7 @@ static int parse_addr(char *in_str, UCHAR *out)
|
||||
static struct net_device_stats *ray_get_stats(struct net_device *dev)
|
||||
{
|
||||
ray_dev_t *local = (ray_dev_t *)dev->priv;
|
||||
dev_link_t *link = local->finder;
|
||||
struct pcmcia_device *link = local->finder;
|
||||
struct status __iomem *p = local->sram + STATUS_BASE;
|
||||
if (!(link->state & DEV_PRESENT)) {
|
||||
DEBUG(2,"ray_cs net_device_stats - device not present\n");
|
||||
@ -1840,7 +1836,7 @@ static struct net_device_stats *ray_get_stats(struct net_device *dev)
|
||||
static void ray_update_parm(struct net_device *dev, UCHAR objid, UCHAR *value, int len)
|
||||
{
|
||||
ray_dev_t *local = (ray_dev_t *)dev->priv;
|
||||
dev_link_t *link = local->finder;
|
||||
struct pcmcia_device *link = local->finder;
|
||||
int ccsindex;
|
||||
int i;
|
||||
struct ccs __iomem *pccs;
|
||||
@ -1877,7 +1873,7 @@ static void ray_update_multi_list(struct net_device *dev, int all)
|
||||
struct ccs __iomem *pccs;
|
||||
int i = 0;
|
||||
ray_dev_t *local = (ray_dev_t *)dev->priv;
|
||||
dev_link_t *link = local->finder;
|
||||
struct pcmcia_device *link = local->finder;
|
||||
void __iomem *p = local->sram + HOST_TO_ECF_BASE;
|
||||
|
||||
if (!(link->state & DEV_PRESENT)) {
|
||||
@ -1957,7 +1953,7 @@ static void set_multicast_list(struct net_device *dev)
|
||||
static irqreturn_t ray_interrupt(int irq, void *dev_id, struct pt_regs * regs)
|
||||
{
|
||||
struct net_device *dev = (struct net_device *)dev_id;
|
||||
dev_link_t *link;
|
||||
struct pcmcia_device *link;
|
||||
ray_dev_t *local;
|
||||
struct ccs __iomem *pccs;
|
||||
struct rcs __iomem *prcs;
|
||||
@ -1972,7 +1968,7 @@ static irqreturn_t ray_interrupt(int irq, void *dev_id, struct pt_regs * regs)
|
||||
DEBUG(4,"ray_cs: interrupt for *dev=%p\n",dev);
|
||||
|
||||
local = (ray_dev_t *)dev->priv;
|
||||
link = (dev_link_t *)local->finder;
|
||||
link = (struct pcmcia_device *)local->finder;
|
||||
if ( ! (link->state & DEV_PRESENT) || link->state & DEV_SUSPEND ) {
|
||||
DEBUG(2,"ray_cs interrupt from device not present or suspended.\n");
|
||||
return IRQ_NONE;
|
||||
@ -2492,7 +2488,7 @@ static void release_frag_chain(ray_dev_t *local, struct rcs __iomem * prcs)
|
||||
/*===========================================================================*/
|
||||
static void authenticate(ray_dev_t *local)
|
||||
{
|
||||
dev_link_t *link = local->finder;
|
||||
struct pcmcia_device *link = local->finder;
|
||||
DEBUG(0,"ray_cs Starting authentication.\n");
|
||||
if (!(link->state & DEV_PRESENT)) {
|
||||
DEBUG(2,"ray_cs authenticate - device not present\n");
|
||||
@ -2558,7 +2554,7 @@ static void rx_authenticate(ray_dev_t *local, struct rcs __iomem *prcs,
|
||||
static void associate(ray_dev_t *local)
|
||||
{
|
||||
struct ccs __iomem *pccs;
|
||||
dev_link_t *link = local->finder;
|
||||
struct pcmcia_device *link = local->finder;
|
||||
struct net_device *dev = link->priv;
|
||||
int ccsindex;
|
||||
if (!(link->state & DEV_PRESENT)) {
|
||||
@ -2641,7 +2637,7 @@ static int ray_cs_proc_read(char *buf, char **start, off_t offset, int len)
|
||||
* eg ifconfig
|
||||
*/
|
||||
int i;
|
||||
dev_link_t *link;
|
||||
struct pcmcia_device *link;
|
||||
struct net_device *dev;
|
||||
ray_dev_t *local;
|
||||
UCHAR *p;
|
||||
|
@ -31,7 +31,7 @@ typedef struct ray_dev_t {
|
||||
void __iomem *sram; /* pointer to beginning of shared RAM */
|
||||
void __iomem *amem; /* pointer to attribute mem window */
|
||||
void __iomem *rmem; /* pointer to receive buffer window */
|
||||
dev_link_t *finder; /* pointer back to dev_link_t for card */
|
||||
struct pcmcia_device *finder; /* pointer back to struct pcmcia_device for card */
|
||||
struct timer_list timer;
|
||||
long tx_ccs_lock;
|
||||
long ccs_lock;
|
||||
|
@ -71,8 +71,8 @@ struct orinoco_pccard {
|
||||
/* Function prototypes */
|
||||
/********************************************************************/
|
||||
|
||||
static void spectrum_cs_config(dev_link_t *link);
|
||||
static void spectrum_cs_release(dev_link_t *link);
|
||||
static void spectrum_cs_config(struct pcmcia_device *link);
|
||||
static void spectrum_cs_release(struct pcmcia_device *link);
|
||||
|
||||
/********************************************************************/
|
||||
/* Firmware downloader */
|
||||
@ -238,7 +238,7 @@ spectrum_aux_open(hermes_t *hw)
|
||||
* If IDLE is 1, stop the firmware, so that it can be safely rewritten.
|
||||
*/
|
||||
static int
|
||||
spectrum_reset(dev_link_t *link, int idle)
|
||||
spectrum_reset(struct pcmcia_device *link, int idle)
|
||||
{
|
||||
int last_ret, last_fn;
|
||||
conf_reg_t reg;
|
||||
@ -253,7 +253,7 @@ spectrum_reset(dev_link_t *link, int idle)
|
||||
reg.Action = CS_READ;
|
||||
reg.Offset = CISREG_COR;
|
||||
CS_CHECK(AccessConfigurationRegister,
|
||||
pcmcia_access_configuration_register(link->handle, ®));
|
||||
pcmcia_access_configuration_register(link, ®));
|
||||
save_cor = reg.Value;
|
||||
|
||||
/* Soft-Reset card */
|
||||
@ -261,14 +261,14 @@ spectrum_reset(dev_link_t *link, int idle)
|
||||
reg.Offset = CISREG_COR;
|
||||
reg.Value = (save_cor | COR_SOFT_RESET);
|
||||
CS_CHECK(AccessConfigurationRegister,
|
||||
pcmcia_access_configuration_register(link->handle, ®));
|
||||
pcmcia_access_configuration_register(link, ®));
|
||||
udelay(1000);
|
||||
|
||||
/* Read CCSR */
|
||||
reg.Action = CS_READ;
|
||||
reg.Offset = CISREG_CCSR;
|
||||
CS_CHECK(AccessConfigurationRegister,
|
||||
pcmcia_access_configuration_register(link->handle, ®));
|
||||
pcmcia_access_configuration_register(link, ®));
|
||||
|
||||
/*
|
||||
* Start or stop the firmware. Memory width bit should be
|
||||
@ -278,7 +278,7 @@ spectrum_reset(dev_link_t *link, int idle)
|
||||
reg.Offset = CISREG_CCSR;
|
||||
reg.Value = (idle ? HCR_IDLE : HCR_RUN) | (reg.Value & HCR_MEM16);
|
||||
CS_CHECK(AccessConfigurationRegister,
|
||||
pcmcia_access_configuration_register(link->handle, ®));
|
||||
pcmcia_access_configuration_register(link, ®));
|
||||
udelay(1000);
|
||||
|
||||
/* Restore original COR configuration index */
|
||||
@ -286,12 +286,12 @@ spectrum_reset(dev_link_t *link, int idle)
|
||||
reg.Offset = CISREG_COR;
|
||||
reg.Value = (save_cor & ~COR_SOFT_RESET);
|
||||
CS_CHECK(AccessConfigurationRegister,
|
||||
pcmcia_access_configuration_register(link->handle, ®));
|
||||
pcmcia_access_configuration_register(link, ®));
|
||||
udelay(1000);
|
||||
return 0;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
@ -441,7 +441,7 @@ spectrum_load_blocks(hermes_t *hw, const struct dblock *first_block)
|
||||
* care of the PDA - read it and then write it on top of the firmware.
|
||||
*/
|
||||
static int
|
||||
spectrum_dl_image(hermes_t *hw, dev_link_t *link,
|
||||
spectrum_dl_image(hermes_t *hw, struct pcmcia_device *link,
|
||||
const unsigned char *image)
|
||||
{
|
||||
int ret;
|
||||
@ -505,14 +505,13 @@ spectrum_dl_image(hermes_t *hw, dev_link_t *link,
|
||||
* reset on the card, to make sure it's in a sane state.
|
||||
*/
|
||||
static int
|
||||
spectrum_dl_firmware(hermes_t *hw, dev_link_t *link)
|
||||
spectrum_dl_firmware(hermes_t *hw, struct pcmcia_device *link)
|
||||
{
|
||||
int ret;
|
||||
client_handle_t handle = link->handle;
|
||||
const struct firmware *fw_entry;
|
||||
|
||||
if (request_firmware(&fw_entry, primary_fw_name,
|
||||
&handle_to_dev(handle)) == 0) {
|
||||
&handle_to_dev(link)) == 0) {
|
||||
primsym = fw_entry->data;
|
||||
} else {
|
||||
printk(KERN_ERR PFX "Cannot find firmware: %s\n",
|
||||
@ -521,7 +520,7 @@ spectrum_dl_firmware(hermes_t *hw, dev_link_t *link)
|
||||
}
|
||||
|
||||
if (request_firmware(&fw_entry, secondary_fw_name,
|
||||
&handle_to_dev(handle)) == 0) {
|
||||
&handle_to_dev(link)) == 0) {
|
||||
secsym = fw_entry->data;
|
||||
} else {
|
||||
printk(KERN_ERR PFX "Cannot find firmware: %s\n",
|
||||
@ -554,7 +553,7 @@ static int
|
||||
spectrum_cs_hard_reset(struct orinoco_private *priv)
|
||||
{
|
||||
struct orinoco_pccard *card = priv->card;
|
||||
dev_link_t *link = card->p_dev;
|
||||
struct pcmcia_device *link = card->p_dev;
|
||||
int err;
|
||||
|
||||
if (!hermes_present(&priv->hw)) {
|
||||
@ -584,12 +583,11 @@ spectrum_cs_hard_reset(struct orinoco_private *priv)
|
||||
* configure the card at this point -- we wait until we receive a card
|
||||
* insertion event. */
|
||||
static int
|
||||
spectrum_cs_attach(struct pcmcia_device *p_dev)
|
||||
spectrum_cs_attach(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev;
|
||||
struct orinoco_private *priv;
|
||||
struct orinoco_pccard *card;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
dev = alloc_orinocodev(sizeof(*card), spectrum_cs_hard_reset);
|
||||
if (! dev)
|
||||
@ -598,7 +596,7 @@ spectrum_cs_attach(struct pcmcia_device *p_dev)
|
||||
card = priv->card;
|
||||
|
||||
/* Link both structures together */
|
||||
card->p_dev = p_dev;
|
||||
card->p_dev = link;
|
||||
link->priv = dev;
|
||||
|
||||
/* Interrupt setup */
|
||||
@ -627,9 +625,8 @@ spectrum_cs_attach(struct pcmcia_device *p_dev)
|
||||
* are freed. Otherwise, the structures will be freed when the device
|
||||
* is released.
|
||||
*/
|
||||
static void spectrum_cs_detach(struct pcmcia_device *p_dev)
|
||||
static void spectrum_cs_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
if (link->state & DEV_CONFIG)
|
||||
@ -651,10 +648,9 @@ static void spectrum_cs_detach(struct pcmcia_device *p_dev)
|
||||
*/
|
||||
|
||||
static void
|
||||
spectrum_cs_config(dev_link_t *link)
|
||||
spectrum_cs_config(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev = link->priv;
|
||||
client_handle_t handle = link->handle;
|
||||
struct orinoco_private *priv = netdev_priv(dev);
|
||||
struct orinoco_pccard *card = priv->card;
|
||||
hermes_t *hw = &priv->hw;
|
||||
@ -666,7 +662,7 @@ spectrum_cs_config(dev_link_t *link)
|
||||
cisparse_t parse;
|
||||
void __iomem *mem;
|
||||
|
||||
CS_CHECK(ValidateCIS, pcmcia_validate_cis(handle, &info));
|
||||
CS_CHECK(ValidateCIS, pcmcia_validate_cis(link, &info));
|
||||
|
||||
/*
|
||||
* This reads the card's CONFIG tuple to find its
|
||||
@ -677,9 +673,9 @@ spectrum_cs_config(dev_link_t *link)
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
@ -688,7 +684,7 @@ spectrum_cs_config(dev_link_t *link)
|
||||
|
||||
/* Look up the current Vcc */
|
||||
CS_CHECK(GetConfigurationInfo,
|
||||
pcmcia_get_configuration_info(handle, &conf));
|
||||
pcmcia_get_configuration_info(link, &conf));
|
||||
|
||||
/*
|
||||
* In this loop, we scan the CIS for configuration table
|
||||
@ -705,13 +701,13 @@ spectrum_cs_config(dev_link_t *link)
|
||||
* implementation-defined details.
|
||||
*/
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
while (1) {
|
||||
cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
|
||||
cistpl_cftable_entry_t dflt = { .index = 0 };
|
||||
|
||||
if ( (pcmcia_get_tuple_data(handle, &tuple) != 0)
|
||||
|| (pcmcia_parse_tuple(handle, &tuple, &parse) != 0))
|
||||
if ( (pcmcia_get_tuple_data(link, &tuple) != 0)
|
||||
|| (pcmcia_parse_tuple(link, &tuple, &parse) != 0))
|
||||
goto next_entry;
|
||||
|
||||
if (cfg->flags & CISTPL_CFTABLE_DEFAULT)
|
||||
@ -776,7 +772,7 @@ spectrum_cs_config(dev_link_t *link)
|
||||
}
|
||||
|
||||
/* This reserves IO space but doesn't actually enable it */
|
||||
if (pcmcia_request_io(link->handle, &link->io) != 0)
|
||||
if (pcmcia_request_io(link, &link->io) != 0)
|
||||
goto next_entry;
|
||||
}
|
||||
|
||||
@ -786,8 +782,8 @@ spectrum_cs_config(dev_link_t *link)
|
||||
break;
|
||||
|
||||
next_entry:
|
||||
pcmcia_disable_device(handle);
|
||||
last_ret = pcmcia_get_next_tuple(handle, &tuple);
|
||||
pcmcia_disable_device(link);
|
||||
last_ret = pcmcia_get_next_tuple(link, &tuple);
|
||||
if (last_ret == CS_NO_MORE_ITEMS) {
|
||||
printk(KERN_ERR PFX "GetNextTuple(): No matching "
|
||||
"CIS configuration. Maybe you need the "
|
||||
@ -801,7 +797,7 @@ spectrum_cs_config(dev_link_t *link)
|
||||
* a handler to the interrupt, unless the 'Handler' member of
|
||||
* the irq structure is initialized.
|
||||
*/
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link->handle, &link->irq));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
|
||||
/* We initialize the hermes structure before completing PCMCIA
|
||||
* configuration just in case the interrupt handler gets
|
||||
@ -818,7 +814,7 @@ spectrum_cs_config(dev_link_t *link)
|
||||
* card and host interface into "Memory and IO" mode.
|
||||
*/
|
||||
CS_CHECK(RequestConfiguration,
|
||||
pcmcia_request_configuration(link->handle, &link->conf));
|
||||
pcmcia_request_configuration(link, &link->conf));
|
||||
|
||||
/* Ok, we have the configuration, prepare to register the netdev */
|
||||
dev->base_addr = link->io.BasePort1;
|
||||
@ -831,7 +827,7 @@ spectrum_cs_config(dev_link_t *link)
|
||||
goto failed;
|
||||
}
|
||||
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(handle));
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(link));
|
||||
/* Tell the stack we exist */
|
||||
if (register_netdev(dev) != 0) {
|
||||
printk(KERN_ERR PFX "register_netdev() failed\n");
|
||||
@ -864,7 +860,7 @@ spectrum_cs_config(dev_link_t *link)
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
|
||||
failed:
|
||||
spectrum_cs_release(link);
|
||||
@ -876,7 +872,7 @@ spectrum_cs_config(dev_link_t *link)
|
||||
* still open, this will be postponed until it is closed.
|
||||
*/
|
||||
static void
|
||||
spectrum_cs_release(dev_link_t *link)
|
||||
spectrum_cs_release(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev = link->priv;
|
||||
struct orinoco_private *priv = netdev_priv(dev);
|
||||
@ -888,16 +884,15 @@ spectrum_cs_release(dev_link_t *link)
|
||||
priv->hw_unavailable++;
|
||||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
if (priv->hw.iobase)
|
||||
ioport_unmap(priv->hw.iobase);
|
||||
} /* spectrum_cs_release */
|
||||
|
||||
|
||||
static int
|
||||
spectrum_cs_suspend(struct pcmcia_device *p_dev)
|
||||
spectrum_cs_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
struct orinoco_private *priv = netdev_priv(dev);
|
||||
unsigned long flags;
|
||||
@ -922,9 +917,8 @@ spectrum_cs_suspend(struct pcmcia_device *p_dev)
|
||||
}
|
||||
|
||||
static int
|
||||
spectrum_cs_resume(struct pcmcia_device *p_dev)
|
||||
spectrum_cs_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
struct orinoco_private *priv = netdev_priv(dev);
|
||||
|
||||
|
@ -1005,7 +1005,7 @@ static inline void
|
||||
wv_82593_reconfig(struct net_device * dev)
|
||||
{
|
||||
net_local * lp = netdev_priv(dev);
|
||||
dev_link_t * link = lp->link;
|
||||
struct pcmcia_device * link = lp->link;
|
||||
unsigned long flags;
|
||||
|
||||
/* Arm the flag, will be cleard in wv_82593_config() */
|
||||
@ -3744,16 +3744,16 @@ wv_pcmcia_reset(struct net_device * dev)
|
||||
{
|
||||
int i;
|
||||
conf_reg_t reg = { 0, CS_READ, CISREG_COR, 0 };
|
||||
dev_link_t * link = ((net_local *)netdev_priv(dev))->link;
|
||||
struct pcmcia_device * link = ((net_local *)netdev_priv(dev))->link;
|
||||
|
||||
#ifdef DEBUG_CONFIG_TRACE
|
||||
printk(KERN_DEBUG "%s: ->wv_pcmcia_reset()\n", dev->name);
|
||||
#endif
|
||||
|
||||
i = pcmcia_access_configuration_register(link->handle, ®);
|
||||
i = pcmcia_access_configuration_register(link, ®);
|
||||
if(i != CS_SUCCESS)
|
||||
{
|
||||
cs_error(link->handle, AccessConfigurationRegister, i);
|
||||
cs_error(link, AccessConfigurationRegister, i);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -3764,19 +3764,19 @@ wv_pcmcia_reset(struct net_device * dev)
|
||||
|
||||
reg.Action = CS_WRITE;
|
||||
reg.Value = reg.Value | COR_SW_RESET;
|
||||
i = pcmcia_access_configuration_register(link->handle, ®);
|
||||
i = pcmcia_access_configuration_register(link, ®);
|
||||
if(i != CS_SUCCESS)
|
||||
{
|
||||
cs_error(link->handle, AccessConfigurationRegister, i);
|
||||
cs_error(link, AccessConfigurationRegister, i);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
reg.Action = CS_WRITE;
|
||||
reg.Value = COR_LEVEL_IRQ | COR_CONFIG;
|
||||
i = pcmcia_access_configuration_register(link->handle, ®);
|
||||
i = pcmcia_access_configuration_register(link, ®);
|
||||
if(i != CS_SUCCESS)
|
||||
{
|
||||
cs_error(link->handle, AccessConfigurationRegister, i);
|
||||
cs_error(link, AccessConfigurationRegister, i);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -3940,9 +3940,8 @@ wv_hw_reset(struct net_device * dev)
|
||||
* (called by wavelan_event())
|
||||
*/
|
||||
static inline int
|
||||
wv_pcmcia_config(dev_link_t * link)
|
||||
wv_pcmcia_config(struct pcmcia_device * link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
struct net_device * dev = (struct net_device *) link->priv;
|
||||
@ -3965,16 +3964,16 @@ wv_pcmcia_config(dev_link_t * link)
|
||||
{
|
||||
tuple.Attributes = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
i = pcmcia_get_first_tuple(handle, &tuple);
|
||||
i = pcmcia_get_first_tuple(link, &tuple);
|
||||
if(i != CS_SUCCESS)
|
||||
break;
|
||||
tuple.TupleData = (cisdata_t *)buf;
|
||||
tuple.TupleDataMax = 64;
|
||||
tuple.TupleOffset = 0;
|
||||
i = pcmcia_get_tuple_data(handle, &tuple);
|
||||
i = pcmcia_get_tuple_data(link, &tuple);
|
||||
if(i != CS_SUCCESS)
|
||||
break;
|
||||
i = pcmcia_parse_tuple(handle, &tuple, &parse);
|
||||
i = pcmcia_parse_tuple(link, &tuple, &parse);
|
||||
if(i != CS_SUCCESS)
|
||||
break;
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
@ -3983,7 +3982,7 @@ wv_pcmcia_config(dev_link_t * link)
|
||||
while(0);
|
||||
if(i != CS_SUCCESS)
|
||||
{
|
||||
cs_error(link->handle, ParseTuple, i);
|
||||
cs_error(link, ParseTuple, i);
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
return FALSE;
|
||||
}
|
||||
@ -3992,10 +3991,10 @@ wv_pcmcia_config(dev_link_t * link)
|
||||
link->state |= DEV_CONFIG;
|
||||
do
|
||||
{
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if(i != CS_SUCCESS)
|
||||
{
|
||||
cs_error(link->handle, RequestIO, i);
|
||||
cs_error(link, RequestIO, i);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -4003,10 +4002,10 @@ wv_pcmcia_config(dev_link_t * link)
|
||||
* Now allocate an interrupt line. Note that this does not
|
||||
* actually assign a handler to the interrupt.
|
||||
*/
|
||||
i = pcmcia_request_irq(link->handle, &link->irq);
|
||||
i = pcmcia_request_irq(link, &link->irq);
|
||||
if(i != CS_SUCCESS)
|
||||
{
|
||||
cs_error(link->handle, RequestIRQ, i);
|
||||
cs_error(link, RequestIRQ, i);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -4015,15 +4014,15 @@ wv_pcmcia_config(dev_link_t * link)
|
||||
* the I/O windows and the interrupt mapping.
|
||||
*/
|
||||
link->conf.ConfigIndex = 1;
|
||||
i = pcmcia_request_configuration(link->handle, &link->conf);
|
||||
i = pcmcia_request_configuration(link, &link->conf);
|
||||
if(i != CS_SUCCESS)
|
||||
{
|
||||
cs_error(link->handle, RequestConfiguration, i);
|
||||
cs_error(link, RequestConfiguration, i);
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Allocate a small memory window. Note that the dev_link_t
|
||||
* Allocate a small memory window. Note that the struct pcmcia_device
|
||||
* structure provides space for one window handle -- if your
|
||||
* device needs several windows, you'll need to keep track of
|
||||
* the handles in your private data structure, link->priv.
|
||||
@ -4031,10 +4030,10 @@ wv_pcmcia_config(dev_link_t * link)
|
||||
req.Attributes = WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_AM|WIN_ENABLE;
|
||||
req.Base = req.Size = 0;
|
||||
req.AccessSpeed = mem_speed;
|
||||
i = pcmcia_request_window(&link->handle, &req, &link->win);
|
||||
i = pcmcia_request_window(&link, &req, &link->win);
|
||||
if(i != CS_SUCCESS)
|
||||
{
|
||||
cs_error(link->handle, RequestWindow, i);
|
||||
cs_error(link, RequestWindow, i);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -4046,7 +4045,7 @@ wv_pcmcia_config(dev_link_t * link)
|
||||
i = pcmcia_map_mem_page(link->win, &mem);
|
||||
if(i != CS_SUCCESS)
|
||||
{
|
||||
cs_error(link->handle, MapMemPage, i);
|
||||
cs_error(link, MapMemPage, i);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -4060,7 +4059,7 @@ wv_pcmcia_config(dev_link_t * link)
|
||||
lp->mem, dev->irq, (u_int) dev->base_addr);
|
||||
#endif
|
||||
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(handle));
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(link));
|
||||
i = register_netdev(dev);
|
||||
if(i != 0)
|
||||
{
|
||||
@ -4096,7 +4095,7 @@ wv_pcmcia_config(dev_link_t * link)
|
||||
* still open, this will be postponed until it is closed.
|
||||
*/
|
||||
static void
|
||||
wv_pcmcia_release(dev_link_t *link)
|
||||
wv_pcmcia_release(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device * dev = (struct net_device *) link->priv;
|
||||
net_local * lp = netdev_priv(dev);
|
||||
@ -4106,7 +4105,7 @@ wv_pcmcia_release(dev_link_t *link)
|
||||
#endif
|
||||
|
||||
iounmap(lp->mem);
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
|
||||
#ifdef DEBUG_CONFIG_TRACE
|
||||
printk(KERN_DEBUG "%s: <- wv_pcmcia_release()\n", dev->name);
|
||||
@ -4473,7 +4472,7 @@ static int
|
||||
wavelan_open(struct net_device * dev)
|
||||
{
|
||||
net_local * lp = netdev_priv(dev);
|
||||
dev_link_t * link = lp->link;
|
||||
struct pcmcia_device * link = lp->link;
|
||||
kio_addr_t base = dev->base_addr;
|
||||
|
||||
#ifdef DEBUG_CALLBACK_TRACE
|
||||
@ -4527,7 +4526,7 @@ wavelan_open(struct net_device * dev)
|
||||
static int
|
||||
wavelan_close(struct net_device * dev)
|
||||
{
|
||||
dev_link_t * link = ((net_local *)netdev_priv(dev))->link;
|
||||
struct pcmcia_device * link = ((net_local *)netdev_priv(dev))->link;
|
||||
kio_addr_t base = dev->base_addr;
|
||||
|
||||
#ifdef DEBUG_CALLBACK_TRACE
|
||||
@ -4673,10 +4672,8 @@ wavelan_attach(struct pcmcia_device *p_dev)
|
||||
* is released.
|
||||
*/
|
||||
static void
|
||||
wavelan_detach(struct pcmcia_device *p_dev)
|
||||
wavelan_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
#ifdef DEBUG_CALLBACK_TRACE
|
||||
printk(KERN_DEBUG "-> wavelan_detach(0x%p)\n", link);
|
||||
#endif
|
||||
@ -4713,9 +4710,8 @@ wavelan_detach(struct pcmcia_device *p_dev)
|
||||
#endif
|
||||
}
|
||||
|
||||
static int wavelan_suspend(struct pcmcia_device *p_dev)
|
||||
static int wavelan_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device * dev = (struct net_device *) link->priv;
|
||||
|
||||
/* NB: wavelan_close will be called, but too late, so we are
|
||||
@ -4736,9 +4732,8 @@ static int wavelan_suspend(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int wavelan_resume(struct pcmcia_device *p_dev)
|
||||
static int wavelan_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device * dev = (struct net_device *) link->priv;
|
||||
|
||||
link->state &= ~DEV_SUSPEND;
|
||||
|
@ -602,7 +602,7 @@ struct net_local
|
||||
dev_node_t node; /* ???? What is this stuff ???? */
|
||||
struct net_device * dev; /* Reverse link... */
|
||||
spinlock_t spinlock; /* Serialize access to the hardware (SMP) */
|
||||
dev_link_t * link; /* pcmcia structure */
|
||||
struct pcmcia_device * link; /* pcmcia structure */
|
||||
en_stats stats; /* Ethernet interface statistics */
|
||||
int nresets; /* Number of hw resets */
|
||||
u_char configured; /* If it is configured */
|
||||
@ -733,9 +733,9 @@ static int
|
||||
static inline void
|
||||
wv_hw_reset(struct net_device *); /* Same, + start receiver unit */
|
||||
static inline int
|
||||
wv_pcmcia_config(dev_link_t *); /* Configure the pcmcia interface */
|
||||
wv_pcmcia_config(struct pcmcia_device *); /* Configure the pcmcia interface */
|
||||
static void
|
||||
wv_pcmcia_release(dev_link_t *);/* Remove a device */
|
||||
wv_pcmcia_release(struct pcmcia_device *);/* Remove a device */
|
||||
/* ---------------------- INTERRUPT HANDLING ---------------------- */
|
||||
static irqreturn_t
|
||||
wavelan_interrupt(int, /* Interrupt handler */
|
||||
|
@ -103,8 +103,8 @@ module_param(pc_debug, int, 0);
|
||||
* release a socket, in response to card insertion and ejection events. They
|
||||
* are invoked from the wl24 event handler.
|
||||
*/
|
||||
static void wl3501_config(dev_link_t *link);
|
||||
static void wl3501_release(dev_link_t *link);
|
||||
static void wl3501_config(struct pcmcia_device *link);
|
||||
static void wl3501_release(struct pcmcia_device *link);
|
||||
|
||||
/*
|
||||
* The dev_info variable is the "key" that is used to match up this
|
||||
@ -1270,7 +1270,7 @@ static int wl3501_close(struct net_device *dev)
|
||||
struct wl3501_card *this = dev->priv;
|
||||
int rc = -ENODEV;
|
||||
unsigned long flags;
|
||||
dev_link_t *link;
|
||||
struct pcmcia_device *link;
|
||||
link = this->p_dev;
|
||||
|
||||
spin_lock_irqsave(&this->lock, flags);
|
||||
@ -1383,7 +1383,7 @@ static int wl3501_open(struct net_device *dev)
|
||||
int rc = -ENODEV;
|
||||
struct wl3501_card *this = dev->priv;
|
||||
unsigned long flags;
|
||||
dev_link_t *link;
|
||||
struct pcmcia_device *link;
|
||||
link = this->p_dev;
|
||||
|
||||
spin_lock_irqsave(&this->lock, flags);
|
||||
@ -1477,9 +1477,8 @@ static struct ethtool_ops ops = {
|
||||
* Services. If it has been released, all local data structures are freed.
|
||||
* Otherwise, the structures will be freed when the device is released.
|
||||
*/
|
||||
static void wl3501_detach(struct pcmcia_device *p_dev)
|
||||
static void wl3501_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
/* If the device is currently configured and active, we won't actually
|
||||
@ -1925,23 +1924,22 @@ static int wl3501_attach(struct pcmcia_device *p_dev)
|
||||
{
|
||||
struct net_device *dev;
|
||||
struct wl3501_card *this;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
/* The io structure describes IO port mapping */
|
||||
link->io.NumPorts1 = 16;
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
|
||||
link->io.IOAddrLines = 5;
|
||||
p_dev->io.NumPorts1 = 16;
|
||||
p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
|
||||
p_dev->io.IOAddrLines = 5;
|
||||
|
||||
/* Interrupt setup */
|
||||
link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
|
||||
link->irq.IRQInfo1 = IRQ_LEVEL_ID;
|
||||
link->irq.Handler = wl3501_interrupt;
|
||||
p_dev->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
|
||||
p_dev->irq.IRQInfo1 = IRQ_LEVEL_ID;
|
||||
p_dev->irq.Handler = wl3501_interrupt;
|
||||
|
||||
/* General socket configuration */
|
||||
link->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
link->conf.ConfigIndex = 1;
|
||||
link->conf.Present = PRESENT_OPTION;
|
||||
p_dev->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
p_dev->conf.IntType = INT_MEMORY_AND_IO;
|
||||
p_dev->conf.ConfigIndex = 1;
|
||||
p_dev->conf.Present = PRESENT_OPTION;
|
||||
|
||||
dev = alloc_etherdev(sizeof(struct wl3501_card));
|
||||
if (!dev)
|
||||
@ -1959,9 +1957,9 @@ static int wl3501_attach(struct pcmcia_device *p_dev)
|
||||
dev->wireless_handlers = (struct iw_handler_def *)&wl3501_handler_def;
|
||||
SET_ETHTOOL_OPS(dev, &ops);
|
||||
netif_stop_queue(dev);
|
||||
link->priv = link->irq.Instance = dev;
|
||||
p_dev->priv = p_dev->irq.Instance = dev;
|
||||
|
||||
link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
|
||||
p_dev->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
|
||||
wl3501_config(p_dev);
|
||||
|
||||
return 0;
|
||||
@ -1980,11 +1978,10 @@ do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
* received, to configure the PCMCIA socket, and to make the ethernet device
|
||||
* available to the system.
|
||||
*/
|
||||
static void wl3501_config(dev_link_t *link)
|
||||
static void wl3501_config(struct pcmcia_device *link)
|
||||
{
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
client_handle_t handle = link->handle;
|
||||
struct net_device *dev = link->priv;
|
||||
int i = 0, j, last_fn, last_ret;
|
||||
unsigned char bf[64];
|
||||
@ -1993,12 +1990,12 @@ static void wl3501_config(dev_link_t *link)
|
||||
/* This reads the card's CONFIG tuple to find its config registers. */
|
||||
tuple.Attributes = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
tuple.TupleData = bf;
|
||||
tuple.TupleDataMax = sizeof(bf);
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
@ -2014,28 +2011,28 @@ static void wl3501_config(dev_link_t *link)
|
||||
* 0x200-0x2ff, and so on, because this seems safer */
|
||||
link->io.BasePort1 = j;
|
||||
link->io.BasePort2 = link->io.BasePort1 + 0x10;
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS)
|
||||
break;
|
||||
}
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestIO, i);
|
||||
cs_error(link, RequestIO, i);
|
||||
goto failed;
|
||||
}
|
||||
|
||||
/* Now allocate an interrupt line. Note that this does not actually
|
||||
* assign a handler to the interrupt. */
|
||||
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link->handle, &link->irq));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
|
||||
/* This actually configures the PCMCIA socket -- setting up the I/O
|
||||
* windows and the interrupt mapping. */
|
||||
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link->handle, &link->conf));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
|
||||
dev->irq = link->irq.AssignedIRQ;
|
||||
dev->base_addr = link->io.BasePort1;
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(handle));
|
||||
SET_NETDEV_DEV(dev, &handle_to_dev(link));
|
||||
if (register_netdev(dev)) {
|
||||
printk(KERN_NOTICE "wl3501_cs: register_netdev() failed\n");
|
||||
goto failed;
|
||||
@ -2087,7 +2084,7 @@ static void wl3501_config(dev_link_t *link)
|
||||
netif_start_queue(dev);
|
||||
goto out;
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
failed:
|
||||
wl3501_release(link);
|
||||
out:
|
||||
@ -2102,7 +2099,7 @@ out:
|
||||
* and release the PCMCIA configuration. If the device is still open, this
|
||||
* will be postponed until it is closed.
|
||||
*/
|
||||
static void wl3501_release(dev_link_t *link)
|
||||
static void wl3501_release(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
@ -2110,12 +2107,11 @@ static void wl3501_release(dev_link_t *link)
|
||||
if (link->dev_node)
|
||||
unregister_netdev(dev);
|
||||
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
}
|
||||
|
||||
static int wl3501_suspend(struct pcmcia_device *p_dev)
|
||||
static int wl3501_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
wl3501_pwr_mgmt(dev->priv, WL3501_SUSPEND);
|
||||
@ -2125,9 +2121,8 @@ static int wl3501_suspend(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int wl3501_resume(struct pcmcia_device *p_dev)
|
||||
static int wl3501_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
wl3501_pwr_mgmt(dev->priv, WL3501_RESUME);
|
||||
|
@ -88,8 +88,8 @@ typedef struct parport_info_t {
|
||||
} parport_info_t;
|
||||
|
||||
static void parport_detach(struct pcmcia_device *p_dev);
|
||||
static void parport_config(dev_link_t *link);
|
||||
static void parport_cs_release(dev_link_t *);
|
||||
static void parport_config(struct pcmcia_device *link);
|
||||
static void parport_cs_release(struct pcmcia_device *);
|
||||
|
||||
/*======================================================================
|
||||
|
||||
@ -99,10 +99,9 @@ static void parport_cs_release(dev_link_t *);
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static int parport_attach(struct pcmcia_device *p_dev)
|
||||
static int parport_attach(struct pcmcia_device *link)
|
||||
{
|
||||
parport_info_t *info;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "parport_attach()\n");
|
||||
|
||||
@ -111,7 +110,7 @@ static int parport_attach(struct pcmcia_device *p_dev)
|
||||
if (!info) return -ENOMEM;
|
||||
memset(info, 0, sizeof(*info));
|
||||
link->priv = info;
|
||||
info->p_dev = p_dev;
|
||||
info->p_dev = link;
|
||||
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
|
||||
link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
|
||||
@ -135,10 +134,8 @@ static int parport_attach(struct pcmcia_device *p_dev)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void parport_detach(struct pcmcia_device *p_dev)
|
||||
static void parport_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "parport_detach(0x%p)\n", link);
|
||||
|
||||
if (link->state & DEV_CONFIG)
|
||||
@ -158,9 +155,8 @@ static void parport_detach(struct pcmcia_device *p_dev)
|
||||
#define CS_CHECK(fn, ret) \
|
||||
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
|
||||
void parport_config(dev_link_t *link)
|
||||
void parport_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
parport_info_t *info = link->priv;
|
||||
tuple_t tuple;
|
||||
u_short buf[128];
|
||||
@ -176,9 +172,9 @@ void parport_config(dev_link_t *link)
|
||||
tuple.TupleOffset = 0; tuple.TupleDataMax = 255;
|
||||
tuple.Attributes = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
@ -187,10 +183,10 @@ void parport_config(dev_link_t *link)
|
||||
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
tuple.Attributes = 0;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
while (1) {
|
||||
if (pcmcia_get_tuple_data(handle, &tuple) != 0 ||
|
||||
pcmcia_parse_tuple(handle, &tuple, &parse) != 0)
|
||||
if (pcmcia_get_tuple_data(link, &tuple) != 0 ||
|
||||
pcmcia_parse_tuple(link, &tuple, &parse) != 0)
|
||||
goto next_entry;
|
||||
|
||||
if ((cfg->io.nwin > 0) || (dflt.io.nwin > 0)) {
|
||||
@ -205,7 +201,7 @@ void parport_config(dev_link_t *link)
|
||||
link->io.BasePort2 = io->win[1].base;
|
||||
link->io.NumPorts2 = io->win[1].len;
|
||||
}
|
||||
if (pcmcia_request_io(link->handle, &link->io) != 0)
|
||||
if (pcmcia_request_io(link, &link->io) != 0)
|
||||
goto next_entry;
|
||||
/* If we've got this far, we're done */
|
||||
break;
|
||||
@ -213,11 +209,11 @@ void parport_config(dev_link_t *link)
|
||||
|
||||
next_entry:
|
||||
if (cfg->flags & CISTPL_CFTABLE_DEFAULT) dflt = *cfg;
|
||||
CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(handle, &tuple));
|
||||
CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(link, &tuple));
|
||||
}
|
||||
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(handle, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(handle, &link->conf));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
|
||||
p = parport_pc_probe_port(link->io.BasePort1, link->io.BasePort2,
|
||||
link->irq.AssignedIRQ, PARPORT_DMA_NONE,
|
||||
@ -243,7 +239,7 @@ void parport_config(dev_link_t *link)
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
failed:
|
||||
parport_cs_release(link);
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
@ -258,7 +254,7 @@ failed:
|
||||
|
||||
======================================================================*/
|
||||
|
||||
void parport_cs_release(dev_link_t *link)
|
||||
void parport_cs_release(struct pcmcia_device *link)
|
||||
{
|
||||
parport_info_t *info = link->priv;
|
||||
|
||||
@ -270,7 +266,7 @@ void parport_cs_release(dev_link_t *link)
|
||||
}
|
||||
info->ndev = 0;
|
||||
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
} /* parport_cs_release */
|
||||
|
||||
|
||||
|
@ -31,7 +31,7 @@ typedef struct region_t {
|
||||
u_short region_magic;
|
||||
u_short state;
|
||||
dev_info_t dev_info;
|
||||
client_handle_t mtd;
|
||||
struct pcmcia_device *mtd;
|
||||
u_int MediaID;
|
||||
region_info_t info;
|
||||
} region_t;
|
||||
|
@ -391,7 +391,6 @@ static int pcmcia_device_probe(struct device * dev)
|
||||
}
|
||||
|
||||
p_dev->p_state &= ~CLIENT_UNBOUND;
|
||||
p_dev->handle = p_dev;
|
||||
|
||||
ret = p_drv->probe(p_dev);
|
||||
if (ret)
|
||||
|
@ -94,24 +94,23 @@ typedef struct scsi_info_t {
|
||||
struct Scsi_Host *host;
|
||||
} scsi_info_t;
|
||||
|
||||
static void aha152x_release_cs(dev_link_t *link);
|
||||
static void aha152x_release_cs(struct pcmcia_device *link);
|
||||
static void aha152x_detach(struct pcmcia_device *p_dev);
|
||||
static void aha152x_config_cs(dev_link_t *link);
|
||||
static void aha152x_config_cs(struct pcmcia_device *link);
|
||||
|
||||
static dev_link_t *dev_list;
|
||||
static struct pcmcia_device *dev_list;
|
||||
|
||||
static int aha152x_attach(struct pcmcia_device *p_dev)
|
||||
static int aha152x_attach(struct pcmcia_device *link)
|
||||
{
|
||||
scsi_info_t *info;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
|
||||
DEBUG(0, "aha152x_attach()\n");
|
||||
|
||||
/* Create new SCSI device */
|
||||
info = kmalloc(sizeof(*info), GFP_KERNEL);
|
||||
if (!info) return -ENOMEM;
|
||||
memset(info, 0, sizeof(*info));
|
||||
info->p_dev = p_dev;
|
||||
info->p_dev = link;
|
||||
link->priv = info;
|
||||
|
||||
link->io.NumPorts1 = 0x20;
|
||||
@ -131,10 +130,8 @@ static int aha152x_attach(struct pcmcia_device *p_dev)
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
static void aha152x_detach(struct pcmcia_device *p_dev)
|
||||
static void aha152x_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "aha152x_detach(0x%p)\n", link);
|
||||
|
||||
if (link->state & DEV_CONFIG)
|
||||
@ -149,9 +146,8 @@ static void aha152x_detach(struct pcmcia_device *p_dev)
|
||||
#define CS_CHECK(fn, ret) \
|
||||
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
|
||||
static void aha152x_config_cs(dev_link_t *link)
|
||||
static void aha152x_config_cs(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
scsi_info_t *info = link->priv;
|
||||
struct aha152x_setup s;
|
||||
tuple_t tuple;
|
||||
@ -166,19 +162,19 @@ static void aha152x_config_cs(dev_link_t *link)
|
||||
tuple.TupleData = tuple_data;
|
||||
tuple.TupleDataMax = 64;
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
|
||||
/* Configure card */
|
||||
link->state |= DEV_CONFIG;
|
||||
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
while (1) {
|
||||
if (pcmcia_get_tuple_data(handle, &tuple) != 0 ||
|
||||
pcmcia_parse_tuple(handle, &tuple, &parse) != 0)
|
||||
if (pcmcia_get_tuple_data(link, &tuple) != 0 ||
|
||||
pcmcia_parse_tuple(link, &tuple, &parse) != 0)
|
||||
goto next_entry;
|
||||
/* For New Media T&J, look for a SCSI window */
|
||||
if (parse.cftable_entry.io.win[0].len >= 0x20)
|
||||
@ -189,15 +185,15 @@ static void aha152x_config_cs(dev_link_t *link)
|
||||
if ((parse.cftable_entry.io.nwin > 0) &&
|
||||
(link->io.BasePort1 < 0xffff)) {
|
||||
link->conf.ConfigIndex = parse.cftable_entry.index;
|
||||
i = pcmcia_request_io(handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS) break;
|
||||
}
|
||||
next_entry:
|
||||
CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(handle, &tuple));
|
||||
CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(link, &tuple));
|
||||
}
|
||||
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(handle, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(handle, &link->conf));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
|
||||
/* Set configuration options for the aha152x driver */
|
||||
memset(&s, 0, sizeof(s));
|
||||
@ -226,22 +222,21 @@ static void aha152x_config_cs(dev_link_t *link)
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
aha152x_release_cs(link);
|
||||
return;
|
||||
}
|
||||
|
||||
static void aha152x_release_cs(dev_link_t *link)
|
||||
static void aha152x_release_cs(struct pcmcia_device *link)
|
||||
{
|
||||
scsi_info_t *info = link->priv;
|
||||
|
||||
aha152x_release(info->host);
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
}
|
||||
|
||||
static int aha152x_resume(struct pcmcia_device *dev)
|
||||
static int aha152x_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(dev);
|
||||
scsi_info_t *info = link->priv;
|
||||
|
||||
aha152x_host_reset_host(info->host);
|
||||
|
@ -79,14 +79,13 @@ typedef struct scsi_info_t {
|
||||
} scsi_info_t;
|
||||
|
||||
|
||||
static void fdomain_release(dev_link_t *link);
|
||||
static void fdomain_release(struct pcmcia_device *link);
|
||||
static void fdomain_detach(struct pcmcia_device *p_dev);
|
||||
static void fdomain_config(dev_link_t *link);
|
||||
static void fdomain_config(struct pcmcia_device *link);
|
||||
|
||||
static int fdomain_attach(struct pcmcia_device *p_dev)
|
||||
static int fdomain_attach(struct pcmcia_device *link)
|
||||
{
|
||||
scsi_info_t *info;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "fdomain_attach()\n");
|
||||
|
||||
@ -94,7 +93,7 @@ static int fdomain_attach(struct pcmcia_device *p_dev)
|
||||
info = kmalloc(sizeof(*info), GFP_KERNEL);
|
||||
if (!info) return -ENOMEM;
|
||||
memset(info, 0, sizeof(*info));
|
||||
info->p_dev = p_dev;
|
||||
info->p_dev = link;
|
||||
link->priv = info;
|
||||
link->io.NumPorts1 = 0x10;
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
|
||||
@ -113,10 +112,8 @@ static int fdomain_attach(struct pcmcia_device *p_dev)
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
static void fdomain_detach(struct pcmcia_device *p_dev)
|
||||
static void fdomain_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "fdomain_detach(0x%p)\n", link);
|
||||
|
||||
if (link->state & DEV_CONFIG)
|
||||
@ -130,9 +127,8 @@ static void fdomain_detach(struct pcmcia_device *p_dev)
|
||||
#define CS_CHECK(fn, ret) \
|
||||
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
|
||||
static void fdomain_config(dev_link_t *link)
|
||||
static void fdomain_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
scsi_info_t *info = link->priv;
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
@ -147,30 +143,30 @@ static void fdomain_config(dev_link_t *link)
|
||||
tuple.TupleData = tuple_data;
|
||||
tuple.TupleDataMax = 64;
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
|
||||
/* Configure card */
|
||||
link->state |= DEV_CONFIG;
|
||||
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
while (1) {
|
||||
if (pcmcia_get_tuple_data(handle, &tuple) != 0 ||
|
||||
pcmcia_parse_tuple(handle, &tuple, &parse) != 0)
|
||||
if (pcmcia_get_tuple_data(link, &tuple) != 0 ||
|
||||
pcmcia_parse_tuple(link, &tuple, &parse) != 0)
|
||||
goto next_entry;
|
||||
link->conf.ConfigIndex = parse.cftable_entry.index;
|
||||
link->io.BasePort1 = parse.cftable_entry.io.win[0].base;
|
||||
i = pcmcia_request_io(handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS) break;
|
||||
next_entry:
|
||||
CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(handle, &tuple));
|
||||
CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(link, &tuple));
|
||||
}
|
||||
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(handle, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(handle, &link->conf));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
|
||||
/* A bad hack... */
|
||||
release_region(link->io.BasePort1, link->io.NumPorts1);
|
||||
@ -196,7 +192,7 @@ static void fdomain_config(dev_link_t *link)
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
fdomain_release(link);
|
||||
return;
|
||||
|
||||
@ -204,23 +200,21 @@ cs_failed:
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
static void fdomain_release(dev_link_t *link)
|
||||
static void fdomain_release(struct pcmcia_device *link)
|
||||
{
|
||||
scsi_info_t *info = link->priv;
|
||||
|
||||
DEBUG(0, "fdomain_release(0x%p)\n", link);
|
||||
|
||||
scsi_remove_host(info->host);
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
scsi_unregister(info->host);
|
||||
}
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
static int fdomain_resume(struct pcmcia_device *dev)
|
||||
static int fdomain_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(dev);
|
||||
|
||||
if (link->state & DEV_CONFIG)
|
||||
fdomain_16x0_bus_reset(NULL);
|
||||
|
||||
|
@ -1593,11 +1593,10 @@ static int nsp_eh_host_reset(Scsi_Cmnd *SCpnt)
|
||||
configure the card at this point -- we wait until we receive a
|
||||
card insertion event.
|
||||
======================================================================*/
|
||||
static int nsp_cs_attach(struct pcmcia_device *p_dev)
|
||||
static int nsp_cs_attach(struct pcmcia_device *link)
|
||||
{
|
||||
scsi_info_t *info;
|
||||
nsp_hw_data *data = &nsp_data_base;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
nsp_dbg(NSP_DEBUG_INIT, "in");
|
||||
|
||||
@ -1605,7 +1604,7 @@ static int nsp_cs_attach(struct pcmcia_device *p_dev)
|
||||
info = kmalloc(sizeof(*info), GFP_KERNEL);
|
||||
if (info == NULL) { return -ENOMEM; }
|
||||
memset(info, 0, sizeof(*info));
|
||||
info->p_dev = p_dev;
|
||||
info->p_dev = link;
|
||||
link->priv = info;
|
||||
data->ScsiInfo = info;
|
||||
|
||||
@ -1644,10 +1643,8 @@ static int nsp_cs_attach(struct pcmcia_device *p_dev)
|
||||
structures are freed. Otherwise, the structures will be freed
|
||||
when the device is released.
|
||||
======================================================================*/
|
||||
static void nsp_cs_detach(struct pcmcia_device *p_dev)
|
||||
static void nsp_cs_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
nsp_dbg(NSP_DEBUG_INIT, "in, link=0x%p", link);
|
||||
|
||||
if (link->state & DEV_CONFIG) {
|
||||
@ -1668,9 +1665,8 @@ static void nsp_cs_detach(struct pcmcia_device *p_dev)
|
||||
#define CS_CHECK(fn, ret) \
|
||||
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
/*====================================================================*/
|
||||
static void nsp_cs_config(dev_link_t *link)
|
||||
static void nsp_cs_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
scsi_info_t *info = link->priv;
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
@ -1694,9 +1690,9 @@ static void nsp_cs_config(dev_link_t *link)
|
||||
tuple.TupleData = tuple_data;
|
||||
tuple.TupleDataMax = sizeof(tuple_data);
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
@ -1704,15 +1700,15 @@ static void nsp_cs_config(dev_link_t *link)
|
||||
link->state |= DEV_CONFIG;
|
||||
|
||||
/* Look up the current Vcc */
|
||||
CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(handle, &conf));
|
||||
CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(link, &conf));
|
||||
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
while (1) {
|
||||
cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
|
||||
|
||||
if (pcmcia_get_tuple_data(handle, &tuple) != 0 ||
|
||||
pcmcia_parse_tuple(handle, &tuple, &parse) != 0)
|
||||
if (pcmcia_get_tuple_data(link, &tuple) != 0 ||
|
||||
pcmcia_parse_tuple(link, &tuple, &parse) != 0)
|
||||
goto next_entry;
|
||||
|
||||
if (cfg->flags & CISTPL_CFTABLE_DEFAULT) { dflt = *cfg; }
|
||||
@ -1768,7 +1764,7 @@ static void nsp_cs_config(dev_link_t *link)
|
||||
link->io.NumPorts2 = io->win[1].len;
|
||||
}
|
||||
/* This reserves IO space but doesn't actually enable it */
|
||||
if (pcmcia_request_io(link->handle, &link->io) != 0)
|
||||
if (pcmcia_request_io(link, &link->io) != 0)
|
||||
goto next_entry;
|
||||
}
|
||||
|
||||
@ -1783,7 +1779,7 @@ static void nsp_cs_config(dev_link_t *link)
|
||||
req.Size = 0x1000;
|
||||
}
|
||||
req.AccessSpeed = 0;
|
||||
if (pcmcia_request_window(&link->handle, &req, &link->win) != 0)
|
||||
if (pcmcia_request_window(&link, &req, &link->win) != 0)
|
||||
goto next_entry;
|
||||
map.Page = 0; map.CardOffset = mem->win[0].card_addr;
|
||||
if (pcmcia_map_mem_page(link->win, &map) != 0)
|
||||
@ -1797,14 +1793,14 @@ static void nsp_cs_config(dev_link_t *link)
|
||||
|
||||
next_entry:
|
||||
nsp_dbg(NSP_DEBUG_INIT, "next");
|
||||
pcmcia_disable_device(handle);
|
||||
CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(handle, &tuple));
|
||||
pcmcia_disable_device(link);
|
||||
CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(link, &tuple));
|
||||
}
|
||||
|
||||
if (link->conf.Attributes & CONF_ENABLE_IRQ) {
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link->handle, &link->irq));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
}
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(handle, &link->conf));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
|
||||
if (free_ports) {
|
||||
if (link->io.BasePort1) {
|
||||
@ -1925,7 +1921,7 @@ static void nsp_cs_config(dev_link_t *link)
|
||||
|
||||
cs_failed:
|
||||
nsp_dbg(NSP_DEBUG_INIT, "config fail");
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
nsp_cs_release(link);
|
||||
|
||||
return;
|
||||
@ -1938,7 +1934,7 @@ static void nsp_cs_config(dev_link_t *link)
|
||||
device, and release the PCMCIA configuration. If the device is
|
||||
still open, this will be postponed until it is closed.
|
||||
======================================================================*/
|
||||
static void nsp_cs_release(dev_link_t *link)
|
||||
static void nsp_cs_release(struct pcmcia_device *link)
|
||||
{
|
||||
scsi_info_t *info = link->priv;
|
||||
nsp_hw_data *data = NULL;
|
||||
@ -1966,7 +1962,7 @@ static void nsp_cs_release(dev_link_t *link)
|
||||
iounmap((void *)(data->MmioAddress));
|
||||
}
|
||||
}
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,2))
|
||||
if (info->host != NULL) {
|
||||
@ -1975,9 +1971,8 @@ static void nsp_cs_release(dev_link_t *link)
|
||||
#endif
|
||||
} /* nsp_cs_release */
|
||||
|
||||
static int nsp_cs_suspend(struct pcmcia_device *dev)
|
||||
static int nsp_cs_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(dev);
|
||||
scsi_info_t *info = link->priv;
|
||||
nsp_hw_data *data;
|
||||
|
||||
@ -1996,9 +1991,8 @@ static int nsp_cs_suspend(struct pcmcia_device *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int nsp_cs_resume(struct pcmcia_device *dev)
|
||||
static int nsp_cs_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(dev);
|
||||
scsi_info_t *info = link->priv;
|
||||
nsp_hw_data *data;
|
||||
|
||||
|
@ -297,8 +297,8 @@ typedef struct _nsp_hw_data {
|
||||
|
||||
/* Card service functions */
|
||||
static void nsp_cs_detach (struct pcmcia_device *p_dev);
|
||||
static void nsp_cs_release(dev_link_t *link);
|
||||
static void nsp_cs_config (dev_link_t *link);
|
||||
static void nsp_cs_release(struct pcmcia_device *link);
|
||||
static void nsp_cs_config (struct pcmcia_device *link);
|
||||
|
||||
/* Linux SCSI subsystem specific functions */
|
||||
static struct Scsi_Host *nsp_detect (struct scsi_host_template *sht);
|
||||
@ -450,7 +450,7 @@ static inline struct Scsi_Host *scsi_host_hn_get(unsigned short hostno)
|
||||
return host;
|
||||
}
|
||||
|
||||
static void cs_error(client_handle_t handle, int func, int ret)
|
||||
static void cs_error(struct pcmcia_device *handle, int func, int ret)
|
||||
{
|
||||
error_info_t err = { func, ret };
|
||||
pcmcia_report_error(handle, &err);
|
||||
|
@ -97,12 +97,12 @@ typedef struct scsi_info_t {
|
||||
unsigned short manf_id;
|
||||
} scsi_info_t;
|
||||
|
||||
static void qlogic_release(dev_link_t *link);
|
||||
static void qlogic_release(struct pcmcia_device *link);
|
||||
static void qlogic_detach(struct pcmcia_device *p_dev);
|
||||
static void qlogic_config(dev_link_t * link);
|
||||
static void qlogic_config(struct pcmcia_device * link);
|
||||
|
||||
static struct Scsi_Host *qlogic_detect(struct scsi_host_template *host,
|
||||
dev_link_t *link, int qbase, int qlirq)
|
||||
struct pcmcia_device *link, int qbase, int qlirq)
|
||||
{
|
||||
int qltyp; /* type of chip */
|
||||
int qinitid;
|
||||
@ -156,10 +156,9 @@ free_scsi_host:
|
||||
err:
|
||||
return NULL;
|
||||
}
|
||||
static int qlogic_attach(struct pcmcia_device *p_dev)
|
||||
static int qlogic_attach(struct pcmcia_device *link)
|
||||
{
|
||||
scsi_info_t *info;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "qlogic_attach()\n");
|
||||
|
||||
@ -168,7 +167,7 @@ static int qlogic_attach(struct pcmcia_device *p_dev)
|
||||
if (!info)
|
||||
return -ENOMEM;
|
||||
memset(info, 0, sizeof(*info));
|
||||
info->p_dev = p_dev;
|
||||
info->p_dev = link;
|
||||
link->priv = info;
|
||||
link->io.NumPorts1 = 16;
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
|
||||
@ -187,10 +186,8 @@ static int qlogic_attach(struct pcmcia_device *p_dev)
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
static void qlogic_detach(struct pcmcia_device *p_dev)
|
||||
static void qlogic_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "qlogic_detach(0x%p)\n", link);
|
||||
|
||||
if (link->state & DEV_CONFIG)
|
||||
@ -205,9 +202,8 @@ static void qlogic_detach(struct pcmcia_device *p_dev)
|
||||
#define CS_CHECK(fn, ret) \
|
||||
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
|
||||
static void qlogic_config(dev_link_t * link)
|
||||
static void qlogic_config(struct pcmcia_device * link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
scsi_info_t *info = link->priv;
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
@ -221,38 +217,38 @@ static void qlogic_config(dev_link_t * link)
|
||||
tuple.TupleDataMax = 64;
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
|
||||
tuple.DesiredTuple = CISTPL_MANFID;
|
||||
if ((pcmcia_get_first_tuple(handle, &tuple) == CS_SUCCESS) && (pcmcia_get_tuple_data(handle, &tuple) == CS_SUCCESS))
|
||||
if ((pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) && (pcmcia_get_tuple_data(link, &tuple) == CS_SUCCESS))
|
||||
info->manf_id = le16_to_cpu(tuple.TupleData[0]);
|
||||
|
||||
/* Configure card */
|
||||
link->state |= DEV_CONFIG;
|
||||
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
while (1) {
|
||||
if (pcmcia_get_tuple_data(handle, &tuple) != 0 ||
|
||||
pcmcia_parse_tuple(handle, &tuple, &parse) != 0)
|
||||
if (pcmcia_get_tuple_data(link, &tuple) != 0 ||
|
||||
pcmcia_parse_tuple(link, &tuple, &parse) != 0)
|
||||
goto next_entry;
|
||||
link->conf.ConfigIndex = parse.cftable_entry.index;
|
||||
link->io.BasePort1 = parse.cftable_entry.io.win[0].base;
|
||||
link->io.NumPorts1 = parse.cftable_entry.io.win[0].len;
|
||||
if (link->io.BasePort1 != 0) {
|
||||
i = pcmcia_request_io(handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS)
|
||||
break;
|
||||
}
|
||||
next_entry:
|
||||
CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(handle, &tuple));
|
||||
CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(link, &tuple));
|
||||
}
|
||||
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(handle, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(handle, &link->conf));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
|
||||
if ((info->manf_id == MANFID_MACNICA) || (info->manf_id == MANFID_PIONEER) || (info->manf_id == 0x0098)) {
|
||||
/* set ATAcmd */
|
||||
@ -283,15 +279,15 @@ out:
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
pcmcia_disable_device(link->handle);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
pcmcia_disable_device(link);
|
||||
return;
|
||||
|
||||
} /* qlogic_config */
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
static void qlogic_release(dev_link_t *link)
|
||||
static void qlogic_release(struct pcmcia_device *link)
|
||||
{
|
||||
scsi_info_t *info = link->priv;
|
||||
|
||||
@ -300,21 +296,19 @@ static void qlogic_release(dev_link_t *link)
|
||||
scsi_remove_host(info->host);
|
||||
|
||||
free_irq(link->irq.AssignedIRQ, info->host);
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
|
||||
scsi_host_put(info->host);
|
||||
}
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
static int qlogic_resume(struct pcmcia_device *dev)
|
||||
static int qlogic_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(dev);
|
||||
|
||||
if (link->state & DEV_CONFIG) {
|
||||
scsi_info_t *info = link->priv;
|
||||
|
||||
pcmcia_request_configuration(link->handle, &link->conf);
|
||||
pcmcia_request_configuration(link, &link->conf);
|
||||
if ((info->manf_id == MANFID_MACNICA) ||
|
||||
(info->manf_id == MANFID_PIONEER) ||
|
||||
(info->manf_id == 0x0098)) {
|
||||
|
@ -527,7 +527,7 @@ idle_out:
|
||||
}
|
||||
|
||||
static void
|
||||
SYM53C500_release(dev_link_t *link)
|
||||
SYM53C500_release(struct pcmcia_device *link)
|
||||
{
|
||||
struct scsi_info_t *info = link->priv;
|
||||
struct Scsi_Host *shost = info->host;
|
||||
@ -550,7 +550,7 @@ SYM53C500_release(dev_link_t *link)
|
||||
if (shost->io_port && shost->n_io_port)
|
||||
release_region(shost->io_port, shost->n_io_port);
|
||||
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
|
||||
scsi_host_put(shost);
|
||||
} /* SYM53C500_release */
|
||||
@ -708,9 +708,8 @@ static struct scsi_host_template sym53c500_driver_template = {
|
||||
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
|
||||
static void
|
||||
SYM53C500_config(dev_link_t *link)
|
||||
SYM53C500_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
struct scsi_info_t *info = link->priv;
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
@ -727,40 +726,40 @@ SYM53C500_config(dev_link_t *link)
|
||||
tuple.TupleDataMax = 64;
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
|
||||
tuple.DesiredTuple = CISTPL_MANFID;
|
||||
if ((pcmcia_get_first_tuple(handle, &tuple) == CS_SUCCESS) &&
|
||||
(pcmcia_get_tuple_data(handle, &tuple) == CS_SUCCESS))
|
||||
if ((pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) &&
|
||||
(pcmcia_get_tuple_data(link, &tuple) == CS_SUCCESS))
|
||||
info->manf_id = le16_to_cpu(tuple.TupleData[0]);
|
||||
|
||||
/* Configure card */
|
||||
link->state |= DEV_CONFIG;
|
||||
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
while (1) {
|
||||
if (pcmcia_get_tuple_data(handle, &tuple) != 0 ||
|
||||
pcmcia_parse_tuple(handle, &tuple, &parse) != 0)
|
||||
if (pcmcia_get_tuple_data(link, &tuple) != 0 ||
|
||||
pcmcia_parse_tuple(link, &tuple, &parse) != 0)
|
||||
goto next_entry;
|
||||
link->conf.ConfigIndex = parse.cftable_entry.index;
|
||||
link->io.BasePort1 = parse.cftable_entry.io.win[0].base;
|
||||
link->io.NumPorts1 = parse.cftable_entry.io.win[0].len;
|
||||
|
||||
if (link->io.BasePort1 != 0) {
|
||||
i = pcmcia_request_io(handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS)
|
||||
break;
|
||||
}
|
||||
next_entry:
|
||||
CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(handle, &tuple));
|
||||
CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(link, &tuple));
|
||||
}
|
||||
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(handle, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(handle, &link->conf));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
|
||||
/*
|
||||
* That's the trouble with copying liberally from another driver.
|
||||
@ -852,14 +851,13 @@ out:
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
SYM53C500_release(link);
|
||||
return;
|
||||
} /* SYM53C500_config */
|
||||
|
||||
static int sym53c500_resume(struct pcmcia_device *dev)
|
||||
static int sym53c500_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(dev);
|
||||
struct scsi_info_t *info = link->priv;
|
||||
|
||||
if (link->state & DEV_CONFIG) {
|
||||
@ -882,10 +880,8 @@ static int sym53c500_resume(struct pcmcia_device *dev)
|
||||
}
|
||||
|
||||
static void
|
||||
SYM53C500_detach(struct pcmcia_device *p_dev)
|
||||
SYM53C500_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "SYM53C500_detach(0x%p)\n", link);
|
||||
|
||||
if (link->state & DEV_CONFIG)
|
||||
@ -896,10 +892,9 @@ SYM53C500_detach(struct pcmcia_device *p_dev)
|
||||
} /* SYM53C500_detach */
|
||||
|
||||
static int
|
||||
SYM53C500_attach(struct pcmcia_device *p_dev)
|
||||
SYM53C500_attach(struct pcmcia_device *link)
|
||||
{
|
||||
struct scsi_info_t *info;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "SYM53C500_attach()\n");
|
||||
|
||||
@ -908,7 +903,7 @@ SYM53C500_attach(struct pcmcia_device *p_dev)
|
||||
if (!info)
|
||||
return -ENOMEM;
|
||||
memset(info, 0, sizeof(*info));
|
||||
info->p_dev = p_dev;
|
||||
info->p_dev = link;
|
||||
link->priv = info;
|
||||
link->io.NumPorts1 = 16;
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
|
||||
|
@ -113,7 +113,7 @@ struct serial_cfg_mem {
|
||||
};
|
||||
|
||||
|
||||
static void serial_config(dev_link_t * link);
|
||||
static void serial_config(struct pcmcia_device * link);
|
||||
|
||||
|
||||
/*======================================================================
|
||||
@ -123,7 +123,7 @@ static void serial_config(dev_link_t * link);
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void serial_remove(dev_link_t *link)
|
||||
static void serial_remove(struct pcmcia_device *link)
|
||||
{
|
||||
struct serial_info *info = link->priv;
|
||||
int i;
|
||||
@ -142,16 +142,14 @@ static void serial_remove(dev_link_t *link)
|
||||
info->p_dev->dev_node = NULL;
|
||||
|
||||
if (!info->slave)
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
|
||||
info->p_dev->state &= ~DEV_CONFIG;
|
||||
}
|
||||
}
|
||||
|
||||
static int serial_suspend(struct pcmcia_device *dev)
|
||||
static int serial_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(dev);
|
||||
|
||||
if (link->state & DEV_CONFIG) {
|
||||
struct serial_info *info = link->priv;
|
||||
int i;
|
||||
@ -166,10 +164,8 @@ static int serial_suspend(struct pcmcia_device *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int serial_resume(struct pcmcia_device *dev)
|
||||
static int serial_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(dev);
|
||||
|
||||
if (DEV_OK(link)) {
|
||||
struct serial_info *info = link->priv;
|
||||
int i;
|
||||
@ -189,10 +185,9 @@ static int serial_resume(struct pcmcia_device *dev)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static int serial_probe(struct pcmcia_device *p_dev)
|
||||
static int serial_probe(struct pcmcia_device *link)
|
||||
{
|
||||
struct serial_info *info;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "serial_attach()\n");
|
||||
|
||||
@ -201,7 +196,7 @@ static int serial_probe(struct pcmcia_device *p_dev)
|
||||
if (!info)
|
||||
return -ENOMEM;
|
||||
memset(info, 0, sizeof (*info));
|
||||
info->p_dev = p_dev;
|
||||
info->p_dev = link;
|
||||
link->priv = info;
|
||||
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
|
||||
@ -230,9 +225,8 @@ static int serial_probe(struct pcmcia_device *p_dev)
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void serial_detach(struct pcmcia_device *p_dev)
|
||||
static void serial_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct serial_info *info = link->priv;
|
||||
|
||||
DEBUG(0, "serial_detach(0x%p)\n", link);
|
||||
@ -253,7 +247,7 @@ static void serial_detach(struct pcmcia_device *p_dev)
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
static int setup_serial(client_handle_t handle, struct serial_info * info,
|
||||
static int setup_serial(struct pcmcia_device *handle, struct serial_info * info,
|
||||
kio_addr_t iobase, int irq)
|
||||
{
|
||||
struct uart_port port;
|
||||
@ -288,7 +282,7 @@ static int setup_serial(client_handle_t handle, struct serial_info * info,
|
||||
/*====================================================================*/
|
||||
|
||||
static int
|
||||
first_tuple(client_handle_t handle, tuple_t * tuple, cisparse_t * parse)
|
||||
first_tuple(struct pcmcia_device *handle, tuple_t * tuple, cisparse_t * parse)
|
||||
{
|
||||
int i;
|
||||
i = pcmcia_get_first_tuple(handle, tuple);
|
||||
@ -301,7 +295,7 @@ first_tuple(client_handle_t handle, tuple_t * tuple, cisparse_t * parse)
|
||||
}
|
||||
|
||||
static int
|
||||
next_tuple(client_handle_t handle, tuple_t * tuple, cisparse_t * parse)
|
||||
next_tuple(struct pcmcia_device *handle, tuple_t * tuple, cisparse_t * parse)
|
||||
{
|
||||
int i;
|
||||
i = pcmcia_get_next_tuple(handle, tuple);
|
||||
@ -315,11 +309,10 @@ next_tuple(client_handle_t handle, tuple_t * tuple, cisparse_t * parse)
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
static int simple_config(dev_link_t *link)
|
||||
static int simple_config(struct pcmcia_device *link)
|
||||
{
|
||||
static const kio_addr_t base[5] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8, 0x0 };
|
||||
static const int size_table[2] = { 8, 16 };
|
||||
client_handle_t handle = link->handle;
|
||||
struct serial_info *info = link->priv;
|
||||
struct serial_cfg_mem *cfg_mem;
|
||||
tuple_t *tuple;
|
||||
@ -340,7 +333,7 @@ static int simple_config(dev_link_t *link)
|
||||
buf = cfg_mem->buf;
|
||||
|
||||
/* If the card is already configured, look up the port and irq */
|
||||
i = pcmcia_get_configuration_info(handle, &config);
|
||||
i = pcmcia_get_configuration_info(link, &config);
|
||||
if ((i == CS_SUCCESS) && (config.Attributes & CONF_VALID_CLIENT)) {
|
||||
kio_addr_t port = 0;
|
||||
if ((config.BasePort2 != 0) && (config.NumPorts2 == 8)) {
|
||||
@ -353,7 +346,7 @@ static int simple_config(dev_link_t *link)
|
||||
}
|
||||
if (info->slave) {
|
||||
kfree(cfg_mem);
|
||||
return setup_serial(handle, info, port, config.AssignedIRQ);
|
||||
return setup_serial(link, info, port, config.AssignedIRQ);
|
||||
}
|
||||
}
|
||||
|
||||
@ -366,7 +359,7 @@ static int simple_config(dev_link_t *link)
|
||||
/* Two tries: without IO aliases, then with aliases */
|
||||
for (s = 0; s < 2; s++) {
|
||||
for (try = 0; try < 2; try++) {
|
||||
i = first_tuple(handle, tuple, parse);
|
||||
i = first_tuple(link, tuple, parse);
|
||||
while (i != CS_NO_MORE_ITEMS) {
|
||||
if (i != CS_SUCCESS)
|
||||
goto next_entry;
|
||||
@ -379,19 +372,19 @@ static int simple_config(dev_link_t *link)
|
||||
link->io.BasePort1 = cf->io.win[0].base;
|
||||
link->io.IOAddrLines = (try == 0) ?
|
||||
16 : cf->io.flags & CISTPL_IO_LINES_MASK;
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS)
|
||||
goto found_port;
|
||||
}
|
||||
next_entry:
|
||||
i = next_tuple(handle, tuple, parse);
|
||||
i = next_tuple(link, tuple, parse);
|
||||
}
|
||||
}
|
||||
}
|
||||
/* Second pass: try to find an entry that isn't picky about
|
||||
its base address, then try to grab any standard serial port
|
||||
address, and finally try to get any free port. */
|
||||
i = first_tuple(handle, tuple, parse);
|
||||
i = first_tuple(link, tuple, parse);
|
||||
while (i != CS_NO_MORE_ITEMS) {
|
||||
if ((i == CS_SUCCESS) && (cf->io.nwin > 0) &&
|
||||
((cf->io.flags & CISTPL_IO_LINES_MASK) <= 3)) {
|
||||
@ -399,43 +392,42 @@ next_entry:
|
||||
for (j = 0; j < 5; j++) {
|
||||
link->io.BasePort1 = base[j];
|
||||
link->io.IOAddrLines = base[j] ? 16 : 3;
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
if (i == CS_SUCCESS)
|
||||
goto found_port;
|
||||
}
|
||||
}
|
||||
i = next_tuple(handle, tuple, parse);
|
||||
i = next_tuple(link, tuple, parse);
|
||||
}
|
||||
|
||||
found_port:
|
||||
if (i != CS_SUCCESS) {
|
||||
printk(KERN_NOTICE
|
||||
"serial_cs: no usable port range found, giving up\n");
|
||||
cs_error(link->handle, RequestIO, i);
|
||||
cs_error(link, RequestIO, i);
|
||||
kfree(cfg_mem);
|
||||
return -1;
|
||||
}
|
||||
|
||||
i = pcmcia_request_irq(link->handle, &link->irq);
|
||||
i = pcmcia_request_irq(link, &link->irq);
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestIRQ, i);
|
||||
cs_error(link, RequestIRQ, i);
|
||||
link->irq.AssignedIRQ = 0;
|
||||
}
|
||||
if (info->multi && (info->manfid == MANFID_3COM))
|
||||
link->conf.ConfigIndex &= ~(0x08);
|
||||
i = pcmcia_request_configuration(link->handle, &link->conf);
|
||||
i = pcmcia_request_configuration(link, &link->conf);
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestConfiguration, i);
|
||||
cs_error(link, RequestConfiguration, i);
|
||||
kfree(cfg_mem);
|
||||
return -1;
|
||||
}
|
||||
kfree(cfg_mem);
|
||||
return setup_serial(handle, info, link->io.BasePort1, link->irq.AssignedIRQ);
|
||||
return setup_serial(link, info, link->io.BasePort1, link->irq.AssignedIRQ);
|
||||
}
|
||||
|
||||
static int multi_config(dev_link_t * link)
|
||||
static int multi_config(struct pcmcia_device * link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
struct serial_info *info = link->priv;
|
||||
struct serial_cfg_mem *cfg_mem;
|
||||
tuple_t *tuple;
|
||||
@ -460,7 +452,7 @@ static int multi_config(dev_link_t * link)
|
||||
|
||||
/* First, look for a generic full-sized window */
|
||||
link->io.NumPorts1 = info->multi * 8;
|
||||
i = first_tuple(handle, tuple, parse);
|
||||
i = first_tuple(link, tuple, parse);
|
||||
while (i != CS_NO_MORE_ITEMS) {
|
||||
/* The quad port cards have bad CIS's, so just look for a
|
||||
window larger than 8 ports and assume it will be right */
|
||||
@ -470,19 +462,19 @@ static int multi_config(dev_link_t * link)
|
||||
link->io.BasePort1 = cf->io.win[0].base;
|
||||
link->io.IOAddrLines =
|
||||
cf->io.flags & CISTPL_IO_LINES_MASK;
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
base2 = link->io.BasePort1 + 8;
|
||||
if (i == CS_SUCCESS)
|
||||
break;
|
||||
}
|
||||
i = next_tuple(handle, tuple, parse);
|
||||
i = next_tuple(link, tuple, parse);
|
||||
}
|
||||
|
||||
/* If that didn't work, look for two windows */
|
||||
if (i != CS_SUCCESS) {
|
||||
link->io.NumPorts1 = link->io.NumPorts2 = 8;
|
||||
info->multi = 2;
|
||||
i = first_tuple(handle, tuple, parse);
|
||||
i = first_tuple(link, tuple, parse);
|
||||
while (i != CS_NO_MORE_ITEMS) {
|
||||
if ((i == CS_SUCCESS) && (cf->io.nwin == 2)) {
|
||||
link->conf.ConfigIndex = cf->index;
|
||||
@ -490,26 +482,26 @@ static int multi_config(dev_link_t * link)
|
||||
link->io.BasePort2 = cf->io.win[1].base;
|
||||
link->io.IOAddrLines =
|
||||
cf->io.flags & CISTPL_IO_LINES_MASK;
|
||||
i = pcmcia_request_io(link->handle, &link->io);
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
base2 = link->io.BasePort2;
|
||||
if (i == CS_SUCCESS)
|
||||
break;
|
||||
}
|
||||
i = next_tuple(handle, tuple, parse);
|
||||
i = next_tuple(link, tuple, parse);
|
||||
}
|
||||
}
|
||||
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestIO, i);
|
||||
cs_error(link, RequestIO, i);
|
||||
rc = -1;
|
||||
goto free_cfg_mem;
|
||||
}
|
||||
|
||||
i = pcmcia_request_irq(link->handle, &link->irq);
|
||||
i = pcmcia_request_irq(link, &link->irq);
|
||||
if (i != CS_SUCCESS) {
|
||||
printk(KERN_NOTICE
|
||||
"serial_cs: no usable port range found, giving up\n");
|
||||
cs_error(link->handle, RequestIRQ, i);
|
||||
cs_error(link, RequestIRQ, i);
|
||||
link->irq.AssignedIRQ = 0;
|
||||
}
|
||||
/* Socket Dual IO: this enables irq's for second port */
|
||||
@ -517,9 +509,9 @@ static int multi_config(dev_link_t * link)
|
||||
link->conf.Present |= PRESENT_EXT_STATUS;
|
||||
link->conf.ExtStatus = ESR_REQ_ATTN_ENA;
|
||||
}
|
||||
i = pcmcia_request_configuration(link->handle, &link->conf);
|
||||
i = pcmcia_request_configuration(link, &link->conf);
|
||||
if (i != CS_SUCCESS) {
|
||||
cs_error(link->handle, RequestConfiguration, i);
|
||||
cs_error(link, RequestConfiguration, i);
|
||||
rc = -1;
|
||||
goto free_cfg_mem;
|
||||
}
|
||||
@ -528,24 +520,24 @@ static int multi_config(dev_link_t * link)
|
||||
8 registers are for the UART, the others are extra registers */
|
||||
if (info->manfid == MANFID_OXSEMI) {
|
||||
if (cf->index == 1 || cf->index == 3) {
|
||||
setup_serial(handle, info, base2, link->irq.AssignedIRQ);
|
||||
setup_serial(link, info, base2, link->irq.AssignedIRQ);
|
||||
outb(12, link->io.BasePort1 + 1);
|
||||
} else {
|
||||
setup_serial(handle, info, link->io.BasePort1, link->irq.AssignedIRQ);
|
||||
setup_serial(link, info, link->io.BasePort1, link->irq.AssignedIRQ);
|
||||
outb(12, base2 + 1);
|
||||
}
|
||||
rc = 0;
|
||||
goto free_cfg_mem;
|
||||
}
|
||||
|
||||
setup_serial(handle, info, link->io.BasePort1, link->irq.AssignedIRQ);
|
||||
setup_serial(link, info, link->io.BasePort1, link->irq.AssignedIRQ);
|
||||
/* The Nokia cards are not really multiport cards */
|
||||
if (info->manfid == MANFID_NOKIA) {
|
||||
rc = 0;
|
||||
goto free_cfg_mem;
|
||||
}
|
||||
for (i = 0; i < info->multi - 1; i++)
|
||||
setup_serial(handle, info, base2 + (8 * i),
|
||||
setup_serial(link, info, base2 + (8 * i),
|
||||
link->irq.AssignedIRQ);
|
||||
rc = 0;
|
||||
free_cfg_mem:
|
||||
@ -561,9 +553,8 @@ free_cfg_mem:
|
||||
|
||||
======================================================================*/
|
||||
|
||||
void serial_config(dev_link_t * link)
|
||||
void serial_config(struct pcmcia_device * link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
struct serial_info *info = link->priv;
|
||||
struct serial_cfg_mem *cfg_mem;
|
||||
tuple_t *tuple;
|
||||
@ -589,7 +580,7 @@ void serial_config(dev_link_t * link)
|
||||
tuple->Attributes = 0;
|
||||
/* Get configuration register information */
|
||||
tuple->DesiredTuple = CISTPL_CONFIG;
|
||||
last_ret = first_tuple(handle, tuple, parse);
|
||||
last_ret = first_tuple(link, tuple, parse);
|
||||
if (last_ret != CS_SUCCESS) {
|
||||
last_fn = ParseTuple;
|
||||
goto cs_failed;
|
||||
@ -603,11 +594,11 @@ void serial_config(dev_link_t * link)
|
||||
/* Is this a compliant multifunction card? */
|
||||
tuple->DesiredTuple = CISTPL_LONGLINK_MFC;
|
||||
tuple->Attributes = TUPLE_RETURN_COMMON | TUPLE_RETURN_LINK;
|
||||
info->multi = (first_tuple(handle, tuple, parse) == CS_SUCCESS);
|
||||
info->multi = (first_tuple(link, tuple, parse) == CS_SUCCESS);
|
||||
|
||||
/* Is this a multiport card? */
|
||||
tuple->DesiredTuple = CISTPL_MANFID;
|
||||
if (first_tuple(handle, tuple, parse) == CS_SUCCESS) {
|
||||
if (first_tuple(link, tuple, parse) == CS_SUCCESS) {
|
||||
info->manfid = parse->manfid.manf;
|
||||
for (i = 0; i < MULTI_COUNT; i++)
|
||||
if ((info->manfid == multi_id[i].manfid) &&
|
||||
@ -621,11 +612,11 @@ void serial_config(dev_link_t * link)
|
||||
multifunction cards that ask for appropriate IO port ranges */
|
||||
tuple->DesiredTuple = CISTPL_FUNCID;
|
||||
if ((info->multi == 0) &&
|
||||
((first_tuple(handle, tuple, parse) != CS_SUCCESS) ||
|
||||
((first_tuple(link, tuple, parse) != CS_SUCCESS) ||
|
||||
(parse->funcid.func == CISTPL_FUNCID_MULTI) ||
|
||||
(parse->funcid.func == CISTPL_FUNCID_SERIAL))) {
|
||||
tuple->DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
if (first_tuple(handle, tuple, parse) == CS_SUCCESS) {
|
||||
if (first_tuple(link, tuple, parse) == CS_SUCCESS) {
|
||||
if ((cf->io.nwin == 1) && (cf->io.win[0].len % 8 == 0))
|
||||
info->multi = cf->io.win[0].len >> 3;
|
||||
if ((cf->io.nwin == 2) && (cf->io.win[0].len == 8) &&
|
||||
@ -644,14 +635,14 @@ void serial_config(dev_link_t * link)
|
||||
|
||||
if (info->manfid == MANFID_IBM) {
|
||||
conf_reg_t reg = { 0, CS_READ, 0x800, 0 };
|
||||
last_ret = pcmcia_access_configuration_register(link->handle, ®);
|
||||
last_ret = pcmcia_access_configuration_register(link, ®);
|
||||
if (last_ret) {
|
||||
last_fn = AccessConfigurationRegister;
|
||||
goto cs_failed;
|
||||
}
|
||||
reg.Action = CS_WRITE;
|
||||
reg.Value = reg.Value | 1;
|
||||
last_ret = pcmcia_access_configuration_register(link->handle, ®);
|
||||
last_ret = pcmcia_access_configuration_register(link, ®);
|
||||
if (last_ret) {
|
||||
last_fn = AccessConfigurationRegister;
|
||||
goto cs_failed;
|
||||
@ -664,7 +655,7 @@ void serial_config(dev_link_t * link)
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
failed:
|
||||
serial_remove(link);
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
|
@ -35,8 +35,8 @@ typedef struct ixj_info_t {
|
||||
} ixj_info_t;
|
||||
|
||||
static void ixj_detach(struct pcmcia_device *p_dev);
|
||||
static void ixj_config(dev_link_t * link);
|
||||
static void ixj_cs_release(dev_link_t * link);
|
||||
static void ixj_config(struct pcmcia_device * link);
|
||||
static void ixj_cs_release(struct pcmcia_device * link);
|
||||
|
||||
static int ixj_attach(struct pcmcia_device *p_dev)
|
||||
{
|
||||
@ -58,10 +58,8 @@ static int ixj_attach(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ixj_detach(struct pcmcia_device *p_dev)
|
||||
static void ixj_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DEBUG(0, "ixj_detach(0x%p)\n", link);
|
||||
|
||||
link->state &= ~DEV_RELEASE_PENDING;
|
||||
@ -74,22 +72,20 @@ static void ixj_detach(struct pcmcia_device *p_dev)
|
||||
#define CS_CHECK(fn, ret) \
|
||||
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
|
||||
static void ixj_get_serial(dev_link_t * link, IXJ * j)
|
||||
static void ixj_get_serial(struct pcmcia_device * link, IXJ * j)
|
||||
{
|
||||
client_handle_t handle;
|
||||
tuple_t tuple;
|
||||
u_short buf[128];
|
||||
char *str;
|
||||
int last_ret, last_fn, i, place;
|
||||
handle = link->handle;
|
||||
DEBUG(0, "ixj_get_serial(0x%p)\n", link);
|
||||
tuple.TupleData = (cisdata_t *) buf;
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.TupleDataMax = 80;
|
||||
tuple.Attributes = 0;
|
||||
tuple.DesiredTuple = CISTPL_VERS_1;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
str = (char *) buf;
|
||||
printk("PCMCIA Version %d.%d\n", str[0], str[1]);
|
||||
str += 2;
|
||||
@ -137,10 +133,9 @@ static void ixj_get_serial(dev_link_t * link, IXJ * j)
|
||||
return;
|
||||
}
|
||||
|
||||
static void ixj_config(dev_link_t * link)
|
||||
static void ixj_config(struct pcmcia_device * link)
|
||||
{
|
||||
IXJ *j;
|
||||
client_handle_t handle;
|
||||
ixj_info_t *info;
|
||||
tuple_t tuple;
|
||||
u_short buf[128];
|
||||
@ -151,7 +146,6 @@ static void ixj_config(dev_link_t * link)
|
||||
0
|
||||
};
|
||||
int last_ret, last_fn;
|
||||
handle = link->handle;
|
||||
info = link->priv;
|
||||
DEBUG(0, "ixj_config(0x%p)\n", link);
|
||||
tuple.TupleData = (cisdata_t *) buf;
|
||||
@ -159,18 +153,18 @@ static void ixj_config(dev_link_t * link)
|
||||
tuple.TupleDataMax = 255;
|
||||
tuple.Attributes = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
link->state |= DEV_CONFIG;
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
tuple.Attributes = 0;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
while (1) {
|
||||
if (pcmcia_get_tuple_data(handle, &tuple) != 0 ||
|
||||
pcmcia_parse_tuple(handle, &tuple, &parse) != 0)
|
||||
if (pcmcia_get_tuple_data(link, &tuple) != 0 ||
|
||||
pcmcia_parse_tuple(link, &tuple, &parse) != 0)
|
||||
goto next_entry;
|
||||
if ((cfg->io.nwin > 0) || (dflt.io.nwin > 0)) {
|
||||
cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt.io;
|
||||
@ -181,7 +175,7 @@ static void ixj_config(dev_link_t * link)
|
||||
link->io.BasePort2 = io->win[1].base;
|
||||
link->io.NumPorts2 = io->win[1].len;
|
||||
}
|
||||
if (pcmcia_request_io(link->handle, &link->io) != 0)
|
||||
if (pcmcia_request_io(link, &link->io) != 0)
|
||||
goto next_entry;
|
||||
/* If we've got this far, we're done */
|
||||
break;
|
||||
@ -189,10 +183,10 @@ static void ixj_config(dev_link_t * link)
|
||||
next_entry:
|
||||
if (cfg->flags & CISTPL_CFTABLE_DEFAULT)
|
||||
dflt = *cfg;
|
||||
CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(handle, &tuple));
|
||||
CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(link, &tuple));
|
||||
}
|
||||
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(handle, &link->conf));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
|
||||
/*
|
||||
* Register the card with the core.
|
||||
@ -206,16 +200,16 @@ static void ixj_config(dev_link_t * link)
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
return;
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
ixj_cs_release(link);
|
||||
}
|
||||
|
||||
static void ixj_cs_release(dev_link_t *link)
|
||||
static void ixj_cs_release(struct pcmcia_device *link)
|
||||
{
|
||||
ixj_info_t *info = link->priv;
|
||||
DEBUG(0, "ixj_cs_release(0x%p)\n", link);
|
||||
info->ndev = 0;
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
}
|
||||
|
||||
static struct pcmcia_device_id ixj_ids[] = {
|
||||
|
@ -71,7 +71,7 @@ typedef struct local_info_t {
|
||||
dev_node_t node;
|
||||
} local_info_t;
|
||||
|
||||
static void sl811_cs_release(dev_link_t * link);
|
||||
static void sl811_cs_release(struct pcmcia_device * link);
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
@ -138,10 +138,8 @@ static int sl811_hc_init(struct device *parent, ioaddr_t base_addr, int irq)
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
static void sl811_cs_detach(struct pcmcia_device *p_dev)
|
||||
static void sl811_cs_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
DBG(0, "sl811_cs_detach(0x%p)\n", link);
|
||||
|
||||
link->state &= ~DEV_PRESENT;
|
||||
@ -152,18 +150,17 @@ static void sl811_cs_detach(struct pcmcia_device *p_dev)
|
||||
kfree(link->priv);
|
||||
}
|
||||
|
||||
static void sl811_cs_release(dev_link_t * link)
|
||||
static void sl811_cs_release(struct pcmcia_device * link)
|
||||
{
|
||||
DBG(0, "sl811_cs_release(0x%p)\n", link);
|
||||
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
platform_device_unregister(&platform_dev);
|
||||
}
|
||||
|
||||
static void sl811_cs_config(dev_link_t *link)
|
||||
static void sl811_cs_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
struct device *parent = &handle_to_dev(handle);
|
||||
struct device *parent = &handle_to_dev(link);
|
||||
local_info_t *dev = link->priv;
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
@ -179,9 +176,9 @@ static void sl811_cs_config(dev_link_t *link)
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
@ -190,15 +187,15 @@ static void sl811_cs_config(dev_link_t *link)
|
||||
|
||||
/* Look up the current Vcc */
|
||||
CS_CHECK(GetConfigurationInfo,
|
||||
pcmcia_get_configuration_info(handle, &conf));
|
||||
pcmcia_get_configuration_info(link, &conf));
|
||||
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
while (1) {
|
||||
cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
|
||||
|
||||
if (pcmcia_get_tuple_data(handle, &tuple) != 0
|
||||
|| pcmcia_parse_tuple(handle, &tuple, &parse)
|
||||
if (pcmcia_get_tuple_data(link, &tuple) != 0
|
||||
|| pcmcia_parse_tuple(link, &tuple, &parse)
|
||||
!= 0)
|
||||
goto next_entry;
|
||||
|
||||
@ -244,14 +241,14 @@ static void sl811_cs_config(dev_link_t *link)
|
||||
link->io.BasePort1 = io->win[0].base;
|
||||
link->io.NumPorts1 = io->win[0].len;
|
||||
|
||||
if (pcmcia_request_io(link->handle, &link->io) != 0)
|
||||
if (pcmcia_request_io(link, &link->io) != 0)
|
||||
goto next_entry;
|
||||
}
|
||||
break;
|
||||
|
||||
next_entry:
|
||||
pcmcia_disable_device(handle);
|
||||
last_ret = pcmcia_get_next_tuple(handle, &tuple);
|
||||
pcmcia_disable_device(link);
|
||||
last_ret = pcmcia_get_next_tuple(link, &tuple);
|
||||
}
|
||||
|
||||
/* require an IRQ and two registers */
|
||||
@ -259,12 +256,12 @@ next_entry:
|
||||
goto cs_failed;
|
||||
if (link->conf.Attributes & CONF_ENABLE_IRQ)
|
||||
CS_CHECK(RequestIRQ,
|
||||
pcmcia_request_irq(link->handle, &link->irq));
|
||||
pcmcia_request_irq(link, &link->irq));
|
||||
else
|
||||
goto cs_failed;
|
||||
|
||||
CS_CHECK(RequestConfiguration,
|
||||
pcmcia_request_configuration(link->handle, &link->conf));
|
||||
pcmcia_request_configuration(link, &link->conf));
|
||||
|
||||
sprintf(dev->node.dev_name, driver_name);
|
||||
dev->node.major = dev->node.minor = 0;
|
||||
@ -285,22 +282,21 @@ next_entry:
|
||||
< 0) {
|
||||
cs_failed:
|
||||
printk("sl811_cs_config failed\n");
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
sl811_cs_release(link);
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
}
|
||||
}
|
||||
|
||||
static int sl811_cs_attach(struct pcmcia_device *p_dev)
|
||||
static int sl811_cs_attach(struct pcmcia_device *link)
|
||||
{
|
||||
local_info_t *local;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
local = kmalloc(sizeof(local_info_t), GFP_KERNEL);
|
||||
if (!local)
|
||||
return -ENOMEM;
|
||||
memset(local, 0, sizeof(local_info_t));
|
||||
local->p_dev = p_dev;
|
||||
local->p_dev = link;
|
||||
link->priv = local;
|
||||
|
||||
/* Initialize */
|
||||
|
@ -35,7 +35,7 @@ typedef struct region_info_t {
|
||||
#define REGION_BAR_MASK 0xe000
|
||||
#define REGION_BAR_SHIFT 13
|
||||
|
||||
int pcmcia_get_first_region(client_handle_t handle, region_info_t *rgn);
|
||||
int pcmcia_get_next_region(client_handle_t handle, region_info_t *rgn);
|
||||
int pcmcia_get_first_region(struct pcmcia_device *handle, region_info_t *rgn);
|
||||
int pcmcia_get_next_region(struct pcmcia_device *handle, region_info_t *rgn);
|
||||
|
||||
#endif /* _LINUX_BULKMEM_H */
|
||||
|
@ -155,7 +155,6 @@ struct pcmcia_device {
|
||||
dev_node_t *dev_node;
|
||||
u_int state;
|
||||
u_int open;
|
||||
struct pcmcia_device *handle;
|
||||
io_req_t io;
|
||||
irq_req_t irq;
|
||||
config_req_t conf;
|
||||
@ -185,18 +184,14 @@ struct pcmcia_device {
|
||||
struct pcmcia_driver * cardmgr;
|
||||
#endif
|
||||
};
|
||||
typedef struct pcmcia_device dev_link_t;
|
||||
|
||||
#define to_pcmcia_dev(n) container_of(n, struct pcmcia_device, dev)
|
||||
#define to_pcmcia_drv(n) container_of(n, struct pcmcia_driver, drv)
|
||||
|
||||
#define handle_to_pdev(handle) (handle)
|
||||
#define handle_to_dev(handle) (handle->dev)
|
||||
|
||||
#define dev_to_instance(dev) (dev)
|
||||
|
||||
/* error reporting */
|
||||
void cs_error(client_handle_t handle, int func, int ret);
|
||||
void cs_error(struct pcmcia_device *handle, int func, int ret);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _LINUX_DS_H */
|
||||
|
@ -161,7 +161,7 @@ typedef struct io_window_t {
|
||||
typedef struct window_t {
|
||||
u_short magic;
|
||||
u_short index;
|
||||
client_handle_t handle;
|
||||
struct pcmcia_device *handle;
|
||||
struct pcmcia_socket *sock;
|
||||
pccard_mem_map ctl;
|
||||
} window_t;
|
||||
|
@ -57,12 +57,12 @@ static struct snd_card *card_list[SNDRV_CARDS];
|
||||
/*
|
||||
* prototypes
|
||||
*/
|
||||
static void pdacf_config(dev_link_t *link);
|
||||
static void pdacf_config(struct pcmcia_device *link);
|
||||
static void snd_pdacf_detach(struct pcmcia_device *p_dev);
|
||||
|
||||
static void pdacf_release(dev_link_t *link)
|
||||
static void pdacf_release(struct pcmcia_device *link)
|
||||
{
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -70,7 +70,7 @@ static void pdacf_release(dev_link_t *link)
|
||||
*/
|
||||
static int snd_pdacf_free(struct snd_pdacf *pdacf)
|
||||
{
|
||||
dev_link_t *link = pdacf->p_dev;
|
||||
struct pcmcia_device *link = pdacf->p_dev;
|
||||
|
||||
pdacf_release(link);
|
||||
|
||||
@ -90,18 +90,15 @@ static int snd_pdacf_dev_free(struct snd_device *device)
|
||||
/*
|
||||
* snd_pdacf_attach - attach callback for cs
|
||||
*/
|
||||
static int snd_pdacf_attach(struct pcmcia_device *p_dev)
|
||||
static int snd_pdacf_attach(struct pcmcia_device *link)
|
||||
{
|
||||
int i;
|
||||
dev_link_t *link; /* Info for cardmgr */
|
||||
struct snd_pdacf *pdacf;
|
||||
struct snd_card *card;
|
||||
static struct snd_device_ops ops = {
|
||||
.dev_free = snd_pdacf_dev_free,
|
||||
};
|
||||
|
||||
link = dev_to_instance(p_dev);
|
||||
|
||||
snd_printdd(KERN_DEBUG "pdacf_attach called\n");
|
||||
/* find an empty slot from the card list */
|
||||
for (i = 0; i < SNDRV_CARDS; i++) {
|
||||
@ -135,7 +132,7 @@ static int snd_pdacf_attach(struct pcmcia_device *p_dev)
|
||||
pdacf->index = i;
|
||||
card_list[i] = card;
|
||||
|
||||
pdacf->p_dev = p_dev;
|
||||
pdacf->p_dev = link;
|
||||
link->priv = pdacf;
|
||||
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
|
||||
@ -201,9 +198,8 @@ static int snd_pdacf_assign_resources(struct snd_pdacf *pdacf, int port, int irq
|
||||
/*
|
||||
* snd_pdacf_detach - detach callback for cs
|
||||
*/
|
||||
static void snd_pdacf_detach(struct pcmcia_device *p_dev)
|
||||
static void snd_pdacf_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct snd_pdacf *chip = link->priv;
|
||||
|
||||
snd_printdd(KERN_DEBUG "pdacf_detach called\n");
|
||||
@ -222,9 +218,8 @@ static void snd_pdacf_detach(struct pcmcia_device *p_dev)
|
||||
#define CS_CHECK(fn, ret) \
|
||||
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
|
||||
static void pdacf_config(dev_link_t *link)
|
||||
static void pdacf_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
struct snd_pdacf *pdacf = link->priv;
|
||||
tuple_t tuple;
|
||||
cisparse_t *parse = NULL;
|
||||
@ -243,9 +238,9 @@ static void pdacf_config(dev_link_t *link)
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, parse));
|
||||
link->conf.ConfigBase = parse->config.base;
|
||||
link->conf.ConfigIndex = 0x5;
|
||||
kfree(parse);
|
||||
@ -253,9 +248,9 @@ static void pdacf_config(dev_link_t *link)
|
||||
/* Configure card */
|
||||
link->state |= DEV_CONFIG;
|
||||
|
||||
CS_CHECK(RequestIO, pcmcia_request_io(handle, &link->io));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link->handle, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link->handle, &link->conf));
|
||||
CS_CHECK(RequestIO, pcmcia_request_io(link, &link->io));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
|
||||
if (snd_pdacf_assign_resources(pdacf, link->io.BasePort1, link->irq.AssignedIRQ) < 0)
|
||||
goto failed;
|
||||
@ -265,16 +260,15 @@ static void pdacf_config(dev_link_t *link)
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
failed:
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
||||
static int pdacf_suspend(struct pcmcia_device *dev)
|
||||
static int pdacf_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(dev);
|
||||
struct snd_pdacf *chip = link->priv;
|
||||
|
||||
snd_printdd(KERN_DEBUG "SUSPEND\n");
|
||||
@ -286,9 +280,8 @@ static int pdacf_suspend(struct pcmcia_device *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int pdacf_resume(struct pcmcia_device *dev)
|
||||
static int pdacf_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(dev);
|
||||
struct snd_pdacf *chip = link->priv;
|
||||
|
||||
snd_printdd(KERN_DEBUG "RESUME\n");
|
||||
|
@ -59,9 +59,9 @@ static unsigned int card_alloc;
|
||||
|
||||
/*
|
||||
*/
|
||||
static void vxpocket_release(dev_link_t *link)
|
||||
static void vxpocket_release(struct pcmcia_device *link)
|
||||
{
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -127,17 +127,14 @@ static struct snd_vx_hardware vxp440_hw = {
|
||||
* create vxpocket instance
|
||||
*/
|
||||
static struct snd_vxpocket *snd_vxpocket_new(struct snd_card *card, int ibl,
|
||||
struct pcmcia_device *p_dev)
|
||||
struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link; /* Info for cardmgr */
|
||||
struct vx_core *chip;
|
||||
struct snd_vxpocket *vxp;
|
||||
static struct snd_device_ops ops = {
|
||||
.dev_free = snd_vxpocket_dev_free,
|
||||
};
|
||||
|
||||
link = dev_to_instance(p_dev);
|
||||
|
||||
chip = snd_vx_create(card, &vxpocket_hw, &snd_vxpocket_ops,
|
||||
sizeof(struct snd_vxpocket) - sizeof(struct vx_core));
|
||||
if (! chip)
|
||||
@ -151,7 +148,7 @@ static struct snd_vxpocket *snd_vxpocket_new(struct snd_card *card, int ibl,
|
||||
|
||||
vxp = (struct snd_vxpocket *)chip;
|
||||
|
||||
vxp->p_dev = p_dev;
|
||||
vxp->p_dev = link;
|
||||
link->priv = chip;
|
||||
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
|
||||
@ -211,9 +208,8 @@ static int snd_vxpocket_assign_resources(struct vx_core *chip, int port, int irq
|
||||
#define CS_CHECK(fn, ret) \
|
||||
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
|
||||
static void vxpocket_config(dev_link_t *link)
|
||||
static void vxpocket_config(struct pcmcia_device *link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
struct vx_core *chip = link->priv;
|
||||
struct snd_vxpocket *vxp = (struct snd_vxpocket *)chip;
|
||||
tuple_t tuple;
|
||||
@ -232,17 +228,17 @@ static void vxpocket_config(dev_link_t *link)
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, parse));
|
||||
link->conf.ConfigBase = parse->config.base;
|
||||
link->conf.Present = parse->config.rmask[0];
|
||||
|
||||
/* redefine hardware record according to the VERSION1 string */
|
||||
tuple.DesiredTuple = CISTPL_VERS_1;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, parse));
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, parse));
|
||||
if (! strcmp(parse->version_1.str + parse->version_1.ofs[1], "VX-POCKET")) {
|
||||
snd_printdd("VX-pocket is detected\n");
|
||||
} else {
|
||||
@ -256,11 +252,11 @@ static void vxpocket_config(dev_link_t *link)
|
||||
/* Configure card */
|
||||
link->state |= DEV_CONFIG;
|
||||
|
||||
CS_CHECK(RequestIO, pcmcia_request_io(handle, &link->io));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link->handle, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link->handle, &link->conf));
|
||||
CS_CHECK(RequestIO, pcmcia_request_io(link, &link->io));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
|
||||
chip->dev = &handle_to_dev(link->handle);
|
||||
chip->dev = &handle_to_dev(link);
|
||||
snd_card_set_dev(chip->card, chip->dev);
|
||||
|
||||
if (snd_vxpocket_assign_resources(chip, link->io.BasePort1, link->irq.AssignedIRQ) < 0)
|
||||
@ -272,17 +268,16 @@ static void vxpocket_config(dev_link_t *link)
|
||||
return;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
cs_error(link, last_fn, last_ret);
|
||||
failed:
|
||||
pcmcia_disable_device(link->handle);
|
||||
pcmcia_disable_device(link);
|
||||
kfree(parse);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
||||
static int vxp_suspend(struct pcmcia_device *dev)
|
||||
static int vxp_suspend(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(dev);
|
||||
struct vx_core *chip = link->priv;
|
||||
|
||||
snd_printdd(KERN_DEBUG "SUSPEND\n");
|
||||
@ -294,9 +289,8 @@ static int vxp_suspend(struct pcmcia_device *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vxp_resume(struct pcmcia_device *dev)
|
||||
static int vxp_resume(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(dev);
|
||||
struct vx_core *chip = link->priv;
|
||||
|
||||
snd_printdd(KERN_DEBUG "RESUME\n");
|
||||
@ -360,9 +354,8 @@ static int vxpocket_attach(struct pcmcia_device *p_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void vxpocket_detach(struct pcmcia_device *p_dev)
|
||||
static void vxpocket_detach(struct pcmcia_device *link)
|
||||
{
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct snd_vxpocket *vxp;
|
||||
struct vx_core *chip;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user