* [PATCH, take 2] libertas: unify various CF-related defines
@ 2008-05-26 10:50 Holger Schurig
2008-05-27 20:14 ` Dan Williams
2008-05-30 15:41 ` John W. Linville
0 siblings, 2 replies; 11+ messages in thread
From: Holger Schurig @ 2008-05-26 10:50 UTC (permalink / raw)
To: libertas-dev, Dan Williams, linux-wireless, John W. Linville
Signed-off-by: Holger Schurig <hs4233@mail.mn-solutions.de>
Index: wireless-testing/drivers/net/wireless/libertas/if_cs.c
===================================================================
--- wireless-testing.orig/drivers/net/wireless/libertas/if_cs.c 2008-05-26 10:38:24.000000000 +0200
+++ wireless-testing/drivers/net/wireless/libertas/if_cs.c 2008-05-26 10:42:09.000000000 +0200
@@ -159,56 +159,40 @@ static int if_cs_poll_while_fw_download(
-/* Host control registers and their bit definitions */
-
-#define IF_CS_H_STATUS 0x00000000
-#define IF_CS_H_STATUS_TX_OVER 0x0001
-#define IF_CS_H_STATUS_RX_OVER 0x0002
-#define IF_CS_H_STATUS_DNLD_OVER 0x0004
-
-#define IF_CS_H_INT_CAUSE 0x00000002
-#define IF_CS_H_IC_TX_OVER 0x0001
-#define IF_CS_H_IC_RX_OVER 0x0002
-#define IF_CS_H_IC_DNLD_OVER 0x0004
-#define IF_CS_H_IC_POWER_DOWN 0x0008
-#define IF_CS_H_IC_HOST_EVENT 0x0010
-#define IF_CS_H_IC_MASK 0x001f
-
-#define IF_CS_H_INT_MASK 0x00000004
-#define IF_CS_H_IM_MASK 0x001f
-
-#define IF_CS_H_WRITE_LEN 0x00000014
-
-#define IF_CS_H_WRITE 0x00000016
+/* First the bitmasks for the host/card interrupt/status registers: */
+#define IF_CS_BIT_TX 0x0001
+#define IF_CS_BIT_RX 0x0002
+#define IF_CS_BIT_COMMAND 0x0004
+#define IF_CS_BIT_RESP 0x0008
+#define IF_CS_BIT_EVENT 0x0010
+#define IF_CS_BIT_MASK 0x001f
-#define IF_CS_H_CMD_LEN 0x00000018
+/* And now the individual registers and assorted masks */
+#define IF_CS_HOST_STATUS 0x00000000
-#define IF_CS_H_CMD 0x0000001A
+#define IF_CS_HOST_INT_CAUSE 0x00000002
-#define IF_CS_C_READ_LEN 0x00000024
+#define IF_CS_HOST_INT_MASK 0x00000004
-#define IF_CS_H_READ 0x00000010
+#define IF_CS_HOST_WRITE 0x00000016
+#define IF_CS_HOST_WRITE_LEN 0x00000014
-/* Card control registers and their bit definitions */
+#define IF_CS_HOST_CMD 0x0000001A
+#define IF_CS_HOST_CMD_LEN 0x00000018
-#define IF_CS_C_STATUS 0x00000020
-#define IF_CS_C_S_TX_DNLD_RDY 0x0001
-#define IF_CS_C_S_RX_UPLD_RDY 0x0002
-#define IF_CS_C_S_CMD_DNLD_RDY 0x0004
-#define IF_CS_C_S_CMD_UPLD_RDY 0x0008
-#define IF_CS_C_S_CARDEVENT 0x0010
-#define IF_CS_C_S_MASK 0x001f
-#define IF_CS_C_S_STATUS_MASK 0x7f00
+#define IF_CS_READ 0x00000010
+#define IF_CS_READ_LEN 0x00000024
-#define IF_CS_C_INT_CAUSE 0x00000022
-#define IF_CS_C_IC_MASK 0x001f
+#define IF_CS_CARD_CMD 0x00000012
+#define IF_CS_CARD_CMD_LEN 0x00000030
-#define IF_CS_C_SQ_READ_LOW 0x00000028
-#define IF_CS_C_SQ_HELPER_OK 0x10
+#define IF_CS_CARD_STATUS 0x00000020
+#define IF_CS_CARD_STATUS_MASK 0x7f00
-#define IF_CS_C_CMD_LEN 0x00000030
+#define IF_CS_CARD_INT_CAUSE 0x00000022
-#define IF_CS_C_CMD 0x00000012
+#define IF_CS_CARD_SQ_READ_LOW 0x00000028
+#define IF_CS_CARD_SQ_HELPER_OK 0x10
#define IF_CS_SCRATCH 0x0000003F
@@ -221,13 +205,13 @@ static int if_cs_poll_while_fw_download(
static inline void if_cs_enable_ints(struct if_cs_card *card)
{
lbs_deb_enter(LBS_DEB_CS);
- if_cs_write16(card, IF_CS_H_INT_MASK, 0);
+ if_cs_write16(card, IF_CS_HOST_INT_MASK, 0);
}
static inline void if_cs_disable_ints(struct if_cs_card *card)
{
lbs_deb_enter(LBS_DEB_CS);
- if_cs_write16(card, IF_CS_H_INT_MASK, IF_CS_H_IM_MASK);
+ if_cs_write16(card, IF_CS_HOST_INT_MASK, IF_CS_BIT_MASK);
}
/*
@@ -244,8 +228,8 @@ static int if_cs_send_cmd(struct lbs_pri
/* Is hardware ready? */
while (1) {
- u16 val = if_cs_read16(card, IF_CS_C_STATUS);
- if (val & IF_CS_C_S_CMD_DNLD_RDY)
+ u16 val = if_cs_read16(card, IF_CS_CARD_STATUS);
+ if (val & IF_CS_BIT_COMMAND)
break;
if (++loops > 100) {
lbs_pr_err("card not ready for commands\n");
@@ -254,20 +238,20 @@ static int if_cs_send_cmd(struct lbs_pri
mdelay(1);
}
- if_cs_write16(card, IF_CS_H_CMD_LEN, nb);
+ if_cs_write16(card, IF_CS_HOST_CMD_LEN, nb);
- if_cs_write16_rep(card, IF_CS_H_CMD, buf, nb / 2);
+ if_cs_write16_rep(card, IF_CS_HOST_CMD, buf, nb / 2);
/* Are we supposed to transfer an odd amount of bytes? */
if (nb & 1)
- if_cs_write8(card, IF_CS_H_CMD, buf[nb-1]);
+ if_cs_write8(card, IF_CS_HOST_CMD, buf[nb-1]);
/* "Assert the download over interrupt command in the Host
* status register" */
- if_cs_write16(card, IF_CS_H_STATUS, IF_CS_H_STATUS_DNLD_OVER);
+ if_cs_write16(card, IF_CS_HOST_STATUS, IF_CS_BIT_COMMAND);
/* "Assert the download over interrupt command in the Card
* interrupt case register" */
- if_cs_write16(card, IF_CS_H_INT_CAUSE, IF_CS_H_IC_DNLD_OVER);
+ if_cs_write16(card, IF_CS_HOST_INT_CAUSE, IF_CS_BIT_COMMAND);
ret = 0;
done:
@@ -287,18 +271,18 @@ static void if_cs_send_data(struct lbs_p
lbs_deb_enter(LBS_DEB_CS);
if_cs_disable_ints(card);
- status = if_cs_read16(card, IF_CS_C_STATUS);
- BUG_ON((status & IF_CS_C_S_TX_DNLD_RDY) == 0);
+ status = if_cs_read16(card, IF_CS_CARD_STATUS);
+ BUG_ON((status & IF_CS_BIT_TX) == 0);
- if_cs_write16(card, IF_CS_H_WRITE_LEN, nb);
+ if_cs_write16(card, IF_CS_HOST_WRITE_LEN, nb);
/* write even number of bytes, then odd byte if necessary */
- if_cs_write16_rep(card, IF_CS_H_WRITE, buf, nb / 2);
+ if_cs_write16_rep(card, IF_CS_HOST_WRITE, buf, nb / 2);
if (nb & 1)
- if_cs_write8(card, IF_CS_H_WRITE, buf[nb-1]);
+ if_cs_write8(card, IF_CS_HOST_WRITE, buf[nb-1]);
- if_cs_write16(card, IF_CS_H_STATUS, IF_CS_H_STATUS_TX_OVER);
- if_cs_write16(card, IF_CS_H_INT_CAUSE, IF_CS_H_STATUS_TX_OVER);
+ if_cs_write16(card, IF_CS_HOST_STATUS, IF_CS_BIT_TX);
+ if_cs_write16(card, IF_CS_HOST_INT_CAUSE, IF_CS_BIT_TX);
if_cs_enable_ints(card);
lbs_deb_leave(LBS_DEB_CS);
@@ -311,27 +295,28 @@ static int if_cs_receive_cmdres(struct l
{
unsigned long flags;
int ret = -1;
- u16 val;
+ u16 status;
lbs_deb_enter(LBS_DEB_CS);
/* is hardware ready? */
- val = if_cs_read16(priv->card, IF_CS_C_STATUS);
- if ((val & IF_CS_C_S_CMD_UPLD_RDY) == 0) {
- lbs_pr_err("card not ready for CMD\n");
+ status = if_cs_read16(priv->card, IF_CS_CARD_STATUS);
+ if ((status & IF_CS_BIT_RESP) == 0) {
+ lbs_pr_err("no cmd response in card\n");
+ *len = 0;
goto out;
}
- *len = if_cs_read16(priv->card, IF_CS_C_CMD_LEN);
+ *len = if_cs_read16(priv->card, IF_CS_CARD_CMD_LEN);
if ((*len == 0) || (*len > LBS_CMD_BUFFER_SIZE)) {
lbs_pr_err("card cmd buffer has invalid # of bytes (%d)\n", *len);
goto out;
}
/* read even number of bytes, then odd byte if necessary */
- if_cs_read16_rep(priv->card, IF_CS_C_CMD, data, *len/sizeof(u16));
+ if_cs_read16_rep(priv->card, IF_CS_CARD_CMD, data, *len/sizeof(u16));
if (*len & 1)
- data[*len-1] = if_cs_read8(priv->card, IF_CS_C_CMD);
+ data[*len-1] = if_cs_read8(priv->card, IF_CS_CARD_CMD);
/* This is a workaround for a firmware that reports too much
* bytes */
@@ -356,7 +341,7 @@ static struct sk_buff *if_cs_receive_dat
lbs_deb_enter(LBS_DEB_CS);
- len = if_cs_read16(priv->card, IF_CS_C_READ_LEN);
+ len = if_cs_read16(priv->card, IF_CS_READ_LEN);
if (len == 0 || len > MRVDRV_ETH_RX_PACKET_BUFFER_SIZE) {
lbs_pr_err("card data buffer has invalid # of bytes (%d)\n", len);
priv->stats.rx_dropped++;
@@ -371,13 +356,13 @@ static struct sk_buff *if_cs_receive_dat
data = skb->data;
/* read even number of bytes, then odd byte if necessary */
- if_cs_read16_rep(priv->card, IF_CS_H_READ, data, len/sizeof(u16));
+ if_cs_read16_rep(priv->card, IF_CS_READ, data, len/sizeof(u16));
if (len & 1)
- data[len-1] = if_cs_read8(priv->card, IF_CS_H_READ);
+ data[len-1] = if_cs_read8(priv->card, IF_CS_READ);
dat_err:
- if_cs_write16(priv->card, IF_CS_H_STATUS, IF_CS_H_STATUS_RX_OVER);
- if_cs_write16(priv->card, IF_CS_H_INT_CAUSE, IF_CS_H_IC_RX_OVER);
+ if_cs_write16(priv->card, IF_CS_HOST_STATUS, IF_CS_BIT_RX);
+ if_cs_write16(priv->card, IF_CS_HOST_INT_CAUSE, IF_CS_BIT_RX);
out:
lbs_deb_leave_args(LBS_DEB_CS, "ret %p", skb);
@@ -393,7 +378,7 @@ static irqreturn_t if_cs_interrupt(int i
lbs_deb_enter(LBS_DEB_CS);
/* Ask card interrupt cause register if there is something for us */
- cause = if_cs_read16(card, IF_CS_C_INT_CAUSE);
+ cause = if_cs_read16(card, IF_CS_CARD_INT_CAUSE);
if (cause == 0) {
/* Not for us */
return IRQ_NONE;
@@ -406,10 +391,10 @@ static irqreturn_t if_cs_interrupt(int i
}
/* Clear interrupt cause */
- if_cs_write16(card, IF_CS_C_INT_CAUSE, cause & IF_CS_C_IC_MASK);
+ if_cs_write16(card, IF_CS_CARD_INT_CAUSE, cause & IF_CS_BIT_MASK);
lbs_deb_cs("cause 0x%04x\n", cause);
- if (cause & IF_CS_C_S_RX_UPLD_RDY) {
+ if (cause & IF_CS_BIT_RX) {
struct sk_buff *skb;
lbs_deb_cs("rx packet\n");
skb = if_cs_receive_data(priv);
@@ -417,12 +402,12 @@ static irqreturn_t if_cs_interrupt(int i
lbs_process_rxed_packet(priv, skb);
}
- if (cause & IF_CS_H_IC_TX_OVER) {
+ if (cause & IF_CS_BIT_TX) {
lbs_deb_cs("tx done\n");
lbs_host_to_card_done(priv);
}
- if (cause & IF_CS_C_S_CMD_UPLD_RDY) {
+ if (cause & IF_CS_BIT_RESP) {
unsigned long flags;
u8 i;
@@ -440,11 +425,11 @@ static irqreturn_t if_cs_interrupt(int i
spin_unlock_irqrestore(&priv->driver_lock, flags);
}
- if (cause & IF_CS_H_IC_HOST_EVENT) {
- u16 event = if_cs_read16(priv->card, IF_CS_C_STATUS)
- & IF_CS_C_S_STATUS_MASK;
- if_cs_write16(priv->card, IF_CS_H_INT_CAUSE,
- IF_CS_H_IC_HOST_EVENT);
+ if (cause & IF_CS_BIT_EVENT) {
+ u16 event = if_cs_read16(priv->card, IF_CS_CARD_STATUS)
+ & IF_CS_CARD_STATUS_MASK;
+ if_cs_write16(priv->card, IF_CS_HOST_INT_CAUSE,
+ IF_CS_BIT_EVENT);
lbs_deb_cs("host event 0x%04x\n", event);
lbs_queue_event(priv, event >> 8 & 0xff);
}
@@ -511,26 +496,26 @@ static int if_cs_prog_helper(struct if_c
/* "write the number of bytes to be sent to the I/O Command
* write length register" */
- if_cs_write16(card, IF_CS_H_CMD_LEN, count);
+ if_cs_write16(card, IF_CS_HOST_CMD_LEN, count);
/* "write this to I/O Command port register as 16 bit writes */
if (count)
- if_cs_write16_rep(card, IF_CS_H_CMD,
+ if_cs_write16_rep(card, IF_CS_HOST_CMD,
&fw->data[sent],
count >> 1);
/* "Assert the download over interrupt command in the Host
* status register" */
- if_cs_write8(card, IF_CS_H_STATUS, IF_CS_H_STATUS_DNLD_OVER);
+ if_cs_write8(card, IF_CS_HOST_STATUS, IF_CS_BIT_COMMAND);
/* "Assert the download over interrupt command in the Card
* interrupt case register" */
- if_cs_write16(card, IF_CS_H_INT_CAUSE, IF_CS_H_IC_DNLD_OVER);
+ if_cs_write16(card, IF_CS_HOST_INT_CAUSE, IF_CS_BIT_COMMAND);
/* "The host polls the Card Status register ... for 50 ms before
declaring a failure */
- ret = if_cs_poll_while_fw_download(card, IF_CS_C_STATUS,
- IF_CS_C_S_CMD_DNLD_RDY);
+ ret = if_cs_poll_while_fw_download(card, IF_CS_CARD_STATUS,
+ IF_CS_BIT_COMMAND);
if (ret < 0) {
lbs_pr_err("can't download helper at 0x%x, ret %d\n",
sent, ret);
@@ -572,14 +557,15 @@ static int if_cs_prog_real(struct if_cs_
}
lbs_deb_cs("fw size %td\n", fw->size);
- ret = if_cs_poll_while_fw_download(card, IF_CS_C_SQ_READ_LOW, IF_CS_C_SQ_HELPER_OK);
+ ret = if_cs_poll_while_fw_download(card, IF_CS_CARD_SQ_READ_LOW,
+ IF_CS_CARD_SQ_HELPER_OK);
if (ret < 0) {
lbs_pr_err("helper firmware doesn't answer\n");
goto err_release;
}
for (sent = 0; sent < fw->size; sent += len) {
- len = if_cs_read16(card, IF_CS_C_SQ_READ_LOW);
+ len = if_cs_read16(card, IF_CS_CARD_SQ_READ_LOW);
if (len & 1) {
retry++;
lbs_pr_info("odd, need to retry this firmware block\n");
@@ -597,16 +583,16 @@ static int if_cs_prog_real(struct if_cs_
}
- if_cs_write16(card, IF_CS_H_CMD_LEN, len);
+ if_cs_write16(card, IF_CS_HOST_CMD_LEN, len);
- if_cs_write16_rep(card, IF_CS_H_CMD,
+ if_cs_write16_rep(card, IF_CS_HOST_CMD,
&fw->data[sent],
(len+1) >> 1);
- if_cs_write8(card, IF_CS_H_STATUS, IF_CS_H_STATUS_DNLD_OVER);
- if_cs_write16(card, IF_CS_H_INT_CAUSE, IF_CS_H_IC_DNLD_OVER);
+ if_cs_write8(card, IF_CS_HOST_STATUS, IF_CS_BIT_COMMAND);
+ if_cs_write16(card, IF_CS_HOST_INT_CAUSE, IF_CS_BIT_COMMAND);
- ret = if_cs_poll_while_fw_download(card, IF_CS_C_STATUS,
- IF_CS_C_S_CMD_DNLD_RDY);
+ ret = if_cs_poll_while_fw_download(card, IF_CS_CARD_STATUS,
+ IF_CS_BIT_COMMAND);
if (ret < 0) {
lbs_pr_err("can't download firmware at 0x%x\n", sent);
goto err_release;
@@ -834,7 +820,7 @@ static int if_cs_probe(struct pcmcia_dev
/* Clear any interrupt cause that happend while sending
* firmware/initializing card */
- if_cs_write16(card, IF_CS_C_INT_CAUSE, IF_CS_C_IC_MASK);
+ if_cs_write16(card, IF_CS_CARD_INT_CAUSE, IF_CS_BIT_MASK);
if_cs_enable_ints(card);
/* And finally bring the card up */
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH, take 2] libertas: unify various CF-related defines
2008-05-26 10:50 [PATCH, take 2] libertas: unify various CF-related defines Holger Schurig
@ 2008-05-27 20:14 ` Dan Williams
2008-05-30 15:41 ` John W. Linville
1 sibling, 0 replies; 11+ messages in thread
From: Dan Williams @ 2008-05-27 20:14 UTC (permalink / raw)
To: Holger Schurig; +Cc: libertas-dev, linux-wireless, John W. Linville
On Mon, 2008-05-26 at 12:50 +0200, Holger Schurig wrote:
> Signed-off-by: Holger Schurig <hs4233@mail.mn-solutions.de>
Acked-by: Dan Williams <dcbw@redhat.com>
> Index: wireless-testing/drivers/net/wireless/libertas/if_cs.c
> ===================================================================
> --- wireless-testing.orig/drivers/net/wireless/libertas/if_cs.c 2008-05-26 10:38:24.000000000 +0200
> +++ wireless-testing/drivers/net/wireless/libertas/if_cs.c 2008-05-26 10:42:09.000000000 +0200
> @@ -159,56 +159,40 @@ static int if_cs_poll_while_fw_download(
>
>
>
> -/* Host control registers and their bit definitions */
> -
> -#define IF_CS_H_STATUS 0x00000000
> -#define IF_CS_H_STATUS_TX_OVER 0x0001
> -#define IF_CS_H_STATUS_RX_OVER 0x0002
> -#define IF_CS_H_STATUS_DNLD_OVER 0x0004
> -
> -#define IF_CS_H_INT_CAUSE 0x00000002
> -#define IF_CS_H_IC_TX_OVER 0x0001
> -#define IF_CS_H_IC_RX_OVER 0x0002
> -#define IF_CS_H_IC_DNLD_OVER 0x0004
> -#define IF_CS_H_IC_POWER_DOWN 0x0008
> -#define IF_CS_H_IC_HOST_EVENT 0x0010
> -#define IF_CS_H_IC_MASK 0x001f
> -
> -#define IF_CS_H_INT_MASK 0x00000004
> -#define IF_CS_H_IM_MASK 0x001f
> -
> -#define IF_CS_H_WRITE_LEN 0x00000014
> -
> -#define IF_CS_H_WRITE 0x00000016
> +/* First the bitmasks for the host/card interrupt/status registers: */
> +#define IF_CS_BIT_TX 0x0001
> +#define IF_CS_BIT_RX 0x0002
> +#define IF_CS_BIT_COMMAND 0x0004
> +#define IF_CS_BIT_RESP 0x0008
> +#define IF_CS_BIT_EVENT 0x0010
> +#define IF_CS_BIT_MASK 0x001f
>
> -#define IF_CS_H_CMD_LEN 0x00000018
> +/* And now the individual registers and assorted masks */
> +#define IF_CS_HOST_STATUS 0x00000000
>
> -#define IF_CS_H_CMD 0x0000001A
> +#define IF_CS_HOST_INT_CAUSE 0x00000002
>
> -#define IF_CS_C_READ_LEN 0x00000024
> +#define IF_CS_HOST_INT_MASK 0x00000004
>
> -#define IF_CS_H_READ 0x00000010
> +#define IF_CS_HOST_WRITE 0x00000016
> +#define IF_CS_HOST_WRITE_LEN 0x00000014
>
> -/* Card control registers and their bit definitions */
> +#define IF_CS_HOST_CMD 0x0000001A
> +#define IF_CS_HOST_CMD_LEN 0x00000018
>
> -#define IF_CS_C_STATUS 0x00000020
> -#define IF_CS_C_S_TX_DNLD_RDY 0x0001
> -#define IF_CS_C_S_RX_UPLD_RDY 0x0002
> -#define IF_CS_C_S_CMD_DNLD_RDY 0x0004
> -#define IF_CS_C_S_CMD_UPLD_RDY 0x0008
> -#define IF_CS_C_S_CARDEVENT 0x0010
> -#define IF_CS_C_S_MASK 0x001f
> -#define IF_CS_C_S_STATUS_MASK 0x7f00
> +#define IF_CS_READ 0x00000010
> +#define IF_CS_READ_LEN 0x00000024
>
> -#define IF_CS_C_INT_CAUSE 0x00000022
> -#define IF_CS_C_IC_MASK 0x001f
> +#define IF_CS_CARD_CMD 0x00000012
> +#define IF_CS_CARD_CMD_LEN 0x00000030
>
> -#define IF_CS_C_SQ_READ_LOW 0x00000028
> -#define IF_CS_C_SQ_HELPER_OK 0x10
> +#define IF_CS_CARD_STATUS 0x00000020
> +#define IF_CS_CARD_STATUS_MASK 0x7f00
>
> -#define IF_CS_C_CMD_LEN 0x00000030
> +#define IF_CS_CARD_INT_CAUSE 0x00000022
>
> -#define IF_CS_C_CMD 0x00000012
> +#define IF_CS_CARD_SQ_READ_LOW 0x00000028
> +#define IF_CS_CARD_SQ_HELPER_OK 0x10
>
> #define IF_CS_SCRATCH 0x0000003F
>
> @@ -221,13 +205,13 @@ static int if_cs_poll_while_fw_download(
> static inline void if_cs_enable_ints(struct if_cs_card *card)
> {
> lbs_deb_enter(LBS_DEB_CS);
> - if_cs_write16(card, IF_CS_H_INT_MASK, 0);
> + if_cs_write16(card, IF_CS_HOST_INT_MASK, 0);
> }
>
> static inline void if_cs_disable_ints(struct if_cs_card *card)
> {
> lbs_deb_enter(LBS_DEB_CS);
> - if_cs_write16(card, IF_CS_H_INT_MASK, IF_CS_H_IM_MASK);
> + if_cs_write16(card, IF_CS_HOST_INT_MASK, IF_CS_BIT_MASK);
> }
>
> /*
> @@ -244,8 +228,8 @@ static int if_cs_send_cmd(struct lbs_pri
>
> /* Is hardware ready? */
> while (1) {
> - u16 val = if_cs_read16(card, IF_CS_C_STATUS);
> - if (val & IF_CS_C_S_CMD_DNLD_RDY)
> + u16 val = if_cs_read16(card, IF_CS_CARD_STATUS);
> + if (val & IF_CS_BIT_COMMAND)
> break;
> if (++loops > 100) {
> lbs_pr_err("card not ready for commands\n");
> @@ -254,20 +238,20 @@ static int if_cs_send_cmd(struct lbs_pri
> mdelay(1);
> }
>
> - if_cs_write16(card, IF_CS_H_CMD_LEN, nb);
> + if_cs_write16(card, IF_CS_HOST_CMD_LEN, nb);
>
> - if_cs_write16_rep(card, IF_CS_H_CMD, buf, nb / 2);
> + if_cs_write16_rep(card, IF_CS_HOST_CMD, buf, nb / 2);
> /* Are we supposed to transfer an odd amount of bytes? */
> if (nb & 1)
> - if_cs_write8(card, IF_CS_H_CMD, buf[nb-1]);
> + if_cs_write8(card, IF_CS_HOST_CMD, buf[nb-1]);
>
> /* "Assert the download over interrupt command in the Host
> * status register" */
> - if_cs_write16(card, IF_CS_H_STATUS, IF_CS_H_STATUS_DNLD_OVER);
> + if_cs_write16(card, IF_CS_HOST_STATUS, IF_CS_BIT_COMMAND);
>
> /* "Assert the download over interrupt command in the Card
> * interrupt case register" */
> - if_cs_write16(card, IF_CS_H_INT_CAUSE, IF_CS_H_IC_DNLD_OVER);
> + if_cs_write16(card, IF_CS_HOST_INT_CAUSE, IF_CS_BIT_COMMAND);
> ret = 0;
>
> done:
> @@ -287,18 +271,18 @@ static void if_cs_send_data(struct lbs_p
> lbs_deb_enter(LBS_DEB_CS);
> if_cs_disable_ints(card);
>
> - status = if_cs_read16(card, IF_CS_C_STATUS);
> - BUG_ON((status & IF_CS_C_S_TX_DNLD_RDY) == 0);
> + status = if_cs_read16(card, IF_CS_CARD_STATUS);
> + BUG_ON((status & IF_CS_BIT_TX) == 0);
>
> - if_cs_write16(card, IF_CS_H_WRITE_LEN, nb);
> + if_cs_write16(card, IF_CS_HOST_WRITE_LEN, nb);
>
> /* write even number of bytes, then odd byte if necessary */
> - if_cs_write16_rep(card, IF_CS_H_WRITE, buf, nb / 2);
> + if_cs_write16_rep(card, IF_CS_HOST_WRITE, buf, nb / 2);
> if (nb & 1)
> - if_cs_write8(card, IF_CS_H_WRITE, buf[nb-1]);
> + if_cs_write8(card, IF_CS_HOST_WRITE, buf[nb-1]);
>
> - if_cs_write16(card, IF_CS_H_STATUS, IF_CS_H_STATUS_TX_OVER);
> - if_cs_write16(card, IF_CS_H_INT_CAUSE, IF_CS_H_STATUS_TX_OVER);
> + if_cs_write16(card, IF_CS_HOST_STATUS, IF_CS_BIT_TX);
> + if_cs_write16(card, IF_CS_HOST_INT_CAUSE, IF_CS_BIT_TX);
> if_cs_enable_ints(card);
>
> lbs_deb_leave(LBS_DEB_CS);
> @@ -311,27 +295,28 @@ static int if_cs_receive_cmdres(struct l
> {
> unsigned long flags;
> int ret = -1;
> - u16 val;
> + u16 status;
>
> lbs_deb_enter(LBS_DEB_CS);
>
> /* is hardware ready? */
> - val = if_cs_read16(priv->card, IF_CS_C_STATUS);
> - if ((val & IF_CS_C_S_CMD_UPLD_RDY) == 0) {
> - lbs_pr_err("card not ready for CMD\n");
> + status = if_cs_read16(priv->card, IF_CS_CARD_STATUS);
> + if ((status & IF_CS_BIT_RESP) == 0) {
> + lbs_pr_err("no cmd response in card\n");
> + *len = 0;
> goto out;
> }
>
> - *len = if_cs_read16(priv->card, IF_CS_C_CMD_LEN);
> + *len = if_cs_read16(priv->card, IF_CS_CARD_CMD_LEN);
> if ((*len == 0) || (*len > LBS_CMD_BUFFER_SIZE)) {
> lbs_pr_err("card cmd buffer has invalid # of bytes (%d)\n", *len);
> goto out;
> }
>
> /* read even number of bytes, then odd byte if necessary */
> - if_cs_read16_rep(priv->card, IF_CS_C_CMD, data, *len/sizeof(u16));
> + if_cs_read16_rep(priv->card, IF_CS_CARD_CMD, data, *len/sizeof(u16));
> if (*len & 1)
> - data[*len-1] = if_cs_read8(priv->card, IF_CS_C_CMD);
> + data[*len-1] = if_cs_read8(priv->card, IF_CS_CARD_CMD);
>
> /* This is a workaround for a firmware that reports too much
> * bytes */
> @@ -356,7 +341,7 @@ static struct sk_buff *if_cs_receive_dat
>
> lbs_deb_enter(LBS_DEB_CS);
>
> - len = if_cs_read16(priv->card, IF_CS_C_READ_LEN);
> + len = if_cs_read16(priv->card, IF_CS_READ_LEN);
> if (len == 0 || len > MRVDRV_ETH_RX_PACKET_BUFFER_SIZE) {
> lbs_pr_err("card data buffer has invalid # of bytes (%d)\n", len);
> priv->stats.rx_dropped++;
> @@ -371,13 +356,13 @@ static struct sk_buff *if_cs_receive_dat
> data = skb->data;
>
> /* read even number of bytes, then odd byte if necessary */
> - if_cs_read16_rep(priv->card, IF_CS_H_READ, data, len/sizeof(u16));
> + if_cs_read16_rep(priv->card, IF_CS_READ, data, len/sizeof(u16));
> if (len & 1)
> - data[len-1] = if_cs_read8(priv->card, IF_CS_H_READ);
> + data[len-1] = if_cs_read8(priv->card, IF_CS_READ);
>
> dat_err:
> - if_cs_write16(priv->card, IF_CS_H_STATUS, IF_CS_H_STATUS_RX_OVER);
> - if_cs_write16(priv->card, IF_CS_H_INT_CAUSE, IF_CS_H_IC_RX_OVER);
> + if_cs_write16(priv->card, IF_CS_HOST_STATUS, IF_CS_BIT_RX);
> + if_cs_write16(priv->card, IF_CS_HOST_INT_CAUSE, IF_CS_BIT_RX);
>
> out:
> lbs_deb_leave_args(LBS_DEB_CS, "ret %p", skb);
> @@ -393,7 +378,7 @@ static irqreturn_t if_cs_interrupt(int i
> lbs_deb_enter(LBS_DEB_CS);
>
> /* Ask card interrupt cause register if there is something for us */
> - cause = if_cs_read16(card, IF_CS_C_INT_CAUSE);
> + cause = if_cs_read16(card, IF_CS_CARD_INT_CAUSE);
> if (cause == 0) {
> /* Not for us */
> return IRQ_NONE;
> @@ -406,10 +391,10 @@ static irqreturn_t if_cs_interrupt(int i
> }
>
> /* Clear interrupt cause */
> - if_cs_write16(card, IF_CS_C_INT_CAUSE, cause & IF_CS_C_IC_MASK);
> + if_cs_write16(card, IF_CS_CARD_INT_CAUSE, cause & IF_CS_BIT_MASK);
> lbs_deb_cs("cause 0x%04x\n", cause);
>
> - if (cause & IF_CS_C_S_RX_UPLD_RDY) {
> + if (cause & IF_CS_BIT_RX) {
> struct sk_buff *skb;
> lbs_deb_cs("rx packet\n");
> skb = if_cs_receive_data(priv);
> @@ -417,12 +402,12 @@ static irqreturn_t if_cs_interrupt(int i
> lbs_process_rxed_packet(priv, skb);
> }
>
> - if (cause & IF_CS_H_IC_TX_OVER) {
> + if (cause & IF_CS_BIT_TX) {
> lbs_deb_cs("tx done\n");
> lbs_host_to_card_done(priv);
> }
>
> - if (cause & IF_CS_C_S_CMD_UPLD_RDY) {
> + if (cause & IF_CS_BIT_RESP) {
> unsigned long flags;
> u8 i;
>
> @@ -440,11 +425,11 @@ static irqreturn_t if_cs_interrupt(int i
> spin_unlock_irqrestore(&priv->driver_lock, flags);
> }
>
> - if (cause & IF_CS_H_IC_HOST_EVENT) {
> - u16 event = if_cs_read16(priv->card, IF_CS_C_STATUS)
> - & IF_CS_C_S_STATUS_MASK;
> - if_cs_write16(priv->card, IF_CS_H_INT_CAUSE,
> - IF_CS_H_IC_HOST_EVENT);
> + if (cause & IF_CS_BIT_EVENT) {
> + u16 event = if_cs_read16(priv->card, IF_CS_CARD_STATUS)
> + & IF_CS_CARD_STATUS_MASK;
> + if_cs_write16(priv->card, IF_CS_HOST_INT_CAUSE,
> + IF_CS_BIT_EVENT);
> lbs_deb_cs("host event 0x%04x\n", event);
> lbs_queue_event(priv, event >> 8 & 0xff);
> }
> @@ -511,26 +496,26 @@ static int if_cs_prog_helper(struct if_c
>
> /* "write the number of bytes to be sent to the I/O Command
> * write length register" */
> - if_cs_write16(card, IF_CS_H_CMD_LEN, count);
> + if_cs_write16(card, IF_CS_HOST_CMD_LEN, count);
>
> /* "write this to I/O Command port register as 16 bit writes */
> if (count)
> - if_cs_write16_rep(card, IF_CS_H_CMD,
> + if_cs_write16_rep(card, IF_CS_HOST_CMD,
> &fw->data[sent],
> count >> 1);
>
> /* "Assert the download over interrupt command in the Host
> * status register" */
> - if_cs_write8(card, IF_CS_H_STATUS, IF_CS_H_STATUS_DNLD_OVER);
> + if_cs_write8(card, IF_CS_HOST_STATUS, IF_CS_BIT_COMMAND);
>
> /* "Assert the download over interrupt command in the Card
> * interrupt case register" */
> - if_cs_write16(card, IF_CS_H_INT_CAUSE, IF_CS_H_IC_DNLD_OVER);
> + if_cs_write16(card, IF_CS_HOST_INT_CAUSE, IF_CS_BIT_COMMAND);
>
> /* "The host polls the Card Status register ... for 50 ms before
> declaring a failure */
> - ret = if_cs_poll_while_fw_download(card, IF_CS_C_STATUS,
> - IF_CS_C_S_CMD_DNLD_RDY);
> + ret = if_cs_poll_while_fw_download(card, IF_CS_CARD_STATUS,
> + IF_CS_BIT_COMMAND);
> if (ret < 0) {
> lbs_pr_err("can't download helper at 0x%x, ret %d\n",
> sent, ret);
> @@ -572,14 +557,15 @@ static int if_cs_prog_real(struct if_cs_
> }
> lbs_deb_cs("fw size %td\n", fw->size);
>
> - ret = if_cs_poll_while_fw_download(card, IF_CS_C_SQ_READ_LOW, IF_CS_C_SQ_HELPER_OK);
> + ret = if_cs_poll_while_fw_download(card, IF_CS_CARD_SQ_READ_LOW,
> + IF_CS_CARD_SQ_HELPER_OK);
> if (ret < 0) {
> lbs_pr_err("helper firmware doesn't answer\n");
> goto err_release;
> }
>
> for (sent = 0; sent < fw->size; sent += len) {
> - len = if_cs_read16(card, IF_CS_C_SQ_READ_LOW);
> + len = if_cs_read16(card, IF_CS_CARD_SQ_READ_LOW);
> if (len & 1) {
> retry++;
> lbs_pr_info("odd, need to retry this firmware block\n");
> @@ -597,16 +583,16 @@ static int if_cs_prog_real(struct if_cs_
> }
>
>
> - if_cs_write16(card, IF_CS_H_CMD_LEN, len);
> + if_cs_write16(card, IF_CS_HOST_CMD_LEN, len);
>
> - if_cs_write16_rep(card, IF_CS_H_CMD,
> + if_cs_write16_rep(card, IF_CS_HOST_CMD,
> &fw->data[sent],
> (len+1) >> 1);
> - if_cs_write8(card, IF_CS_H_STATUS, IF_CS_H_STATUS_DNLD_OVER);
> - if_cs_write16(card, IF_CS_H_INT_CAUSE, IF_CS_H_IC_DNLD_OVER);
> + if_cs_write8(card, IF_CS_HOST_STATUS, IF_CS_BIT_COMMAND);
> + if_cs_write16(card, IF_CS_HOST_INT_CAUSE, IF_CS_BIT_COMMAND);
>
> - ret = if_cs_poll_while_fw_download(card, IF_CS_C_STATUS,
> - IF_CS_C_S_CMD_DNLD_RDY);
> + ret = if_cs_poll_while_fw_download(card, IF_CS_CARD_STATUS,
> + IF_CS_BIT_COMMAND);
> if (ret < 0) {
> lbs_pr_err("can't download firmware at 0x%x\n", sent);
> goto err_release;
> @@ -834,7 +820,7 @@ static int if_cs_probe(struct pcmcia_dev
>
> /* Clear any interrupt cause that happend while sending
> * firmware/initializing card */
> - if_cs_write16(card, IF_CS_C_INT_CAUSE, IF_CS_C_IC_MASK);
> + if_cs_write16(card, IF_CS_CARD_INT_CAUSE, IF_CS_BIT_MASK);
> if_cs_enable_ints(card);
>
> /* And finally bring the card up */
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH, take 2] libertas: unify various CF-related defines
2008-05-26 10:50 [PATCH, take 2] libertas: unify various CF-related defines Holger Schurig
2008-05-27 20:14 ` Dan Williams
@ 2008-05-30 15:41 ` John W. Linville
2008-06-02 6:41 ` Holger Schurig
2008-06-02 7:25 ` [PATCH, RESEND] " Holger Schurig
1 sibling, 2 replies; 11+ messages in thread
From: John W. Linville @ 2008-05-30 15:41 UTC (permalink / raw)
To: Holger Schurig; +Cc: libertas-dev, Dan Williams, linux-wireless
On Mon, May 26, 2008 at 12:50:50PM +0200, Holger Schurig wrote:
> Signed-off-by: Holger Schurig <hs4233@mail.mn-solutions.de>
git says:
Applying libertas: don't spin_unlock_irq() twice
Applying libertas: speeds up downloading of CF firmware
Applying libertas: use lbs_pr_XX instead of printk
Applying libertas: before sleeping, check for a command result
Applying libertas: unify various CF-related defines
error: patch failed: drivers/net/wireless/libertas/if_cs.c:221
error: drivers/net/wireless/libertas/if_cs.c: patch does not apply
patch says:
/home/linville/git/wireless-testing
[linville-t43.local]:> patch -p1 < tmp.mbox
patching file drivers/net/wireless/libertas/if_cs.c
Hunk #2 succeeded at 360 with fuzz 1 (offset 155 lines).
Hunk #3 FAILED at 383.
Hunk #4 FAILED at 393.
Hunk #5 FAILED at 426.
Hunk #6 FAILED at 450.
Hunk #7 FAILED at 496.
Hunk #8 FAILED at 511.
Hunk #9 FAILED at 533.
Hunk #10 FAILED at 546.
Hunk #11 FAILED at 557.
Hunk #12 FAILED at 580.
Hunk #13 succeeded at 344 (offset -152 lines).
Hunk #14 succeeded at 712 (offset 155 lines).
Hunk #15 succeeded at 431 (offset -152 lines).
Hunk #16 succeeded at 975 (offset 155 lines).
10 out of 16 hunks FAILED -- saving rejects to file drivers/net/wireless/libertas/if_cs.c.rej
It looks like a lot of fiddly changes that I (and probably everyone
else) would rather get fixed-up by someone closer to the driver.
John
--
John W. Linville
linville@tuxdriver.com
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH, take 2] libertas: unify various CF-related defines
2008-05-30 15:41 ` John W. Linville
@ 2008-06-02 6:41 ` Holger Schurig
2008-06-02 7:25 ` [PATCH, RESEND] " Holger Schurig
1 sibling, 0 replies; 11+ messages in thread
From: Holger Schurig @ 2008-06-02 6:41 UTC (permalink / raw)
To: John W. Linville; +Cc: libertas-dev, Dan Williams, linux-wireless
On Friday 30 May 2008 17:41:13 John W. Linville wrote:
> On Mon, May 26, 2008 at 12:50:50PM +0200, Holger Schurig wrote:
> > Signed-off-by: Holger Schurig <hs4233@mail.mn-solutions.de>
>
> git says:
>
> Applying libertas: don't spin_unlock_irq() twice
> Applying libertas: speeds up downloading of CF firmware
> Applying libertas: use lbs_pr_XX instead of printk
> Applying libertas: before sleeping, check for a command result
> Applying libertas: unify various CF-related defines
> error: patch failed: drivers/net/wireless/libertas/if_cs.c:221
> error: drivers/net/wireless/libertas/if_cs.c: patch does not
> apply
It should applied after "Re: [PATCH, take 3] libertas: fix
compact flash interrupt handling".
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH, RESEND] libertas: unify various CF-related defines
2008-05-30 15:41 ` John W. Linville
2008-06-02 6:41 ` Holger Schurig
@ 2008-06-02 7:25 ` Holger Schurig
2008-06-03 0:57 ` John W. Linville
1 sibling, 1 reply; 11+ messages in thread
From: Holger Schurig @ 2008-06-02 7:25 UTC (permalink / raw)
To: libertas-dev; +Cc: John W. Linville, Dan Williams, linux-wireless
Signed-off-by: Holger Schurig <hs4233@mail.mn-solutions.de>
---
John, this patch applies successfully for me on top of
wireless-testing v2.6.26-rc4-8765-g24e3ad4.
Index: wireless-testing/drivers/net/wireless/libertas/if_cs.c
===================================================================
--- wireless-testing.orig/drivers/net/wireless/libertas/if_cs.c 2008-05-26 10:38:24.000000000 +0200
+++ wireless-testing/drivers/net/wireless/libertas/if_cs.c 2008-05-26 10:42:09.000000000 +0200
@@ -159,56 +159,40 @@ static int if_cs_poll_while_fw_download(
-/* Host control registers and their bit definitions */
-
-#define IF_CS_H_STATUS 0x00000000
-#define IF_CS_H_STATUS_TX_OVER 0x0001
-#define IF_CS_H_STATUS_RX_OVER 0x0002
-#define IF_CS_H_STATUS_DNLD_OVER 0x0004
-
-#define IF_CS_H_INT_CAUSE 0x00000002
-#define IF_CS_H_IC_TX_OVER 0x0001
-#define IF_CS_H_IC_RX_OVER 0x0002
-#define IF_CS_H_IC_DNLD_OVER 0x0004
-#define IF_CS_H_IC_POWER_DOWN 0x0008
-#define IF_CS_H_IC_HOST_EVENT 0x0010
-#define IF_CS_H_IC_MASK 0x001f
-
-#define IF_CS_H_INT_MASK 0x00000004
-#define IF_CS_H_IM_MASK 0x001f
-
-#define IF_CS_H_WRITE_LEN 0x00000014
-
-#define IF_CS_H_WRITE 0x00000016
+/* First the bitmasks for the host/card interrupt/status registers: */
+#define IF_CS_BIT_TX 0x0001
+#define IF_CS_BIT_RX 0x0002
+#define IF_CS_BIT_COMMAND 0x0004
+#define IF_CS_BIT_RESP 0x0008
+#define IF_CS_BIT_EVENT 0x0010
+#define IF_CS_BIT_MASK 0x001f
-#define IF_CS_H_CMD_LEN 0x00000018
+/* And now the individual registers and assorted masks */
+#define IF_CS_HOST_STATUS 0x00000000
-#define IF_CS_H_CMD 0x0000001A
+#define IF_CS_HOST_INT_CAUSE 0x00000002
-#define IF_CS_C_READ_LEN 0x00000024
+#define IF_CS_HOST_INT_MASK 0x00000004
-#define IF_CS_H_READ 0x00000010
+#define IF_CS_HOST_WRITE 0x00000016
+#define IF_CS_HOST_WRITE_LEN 0x00000014
-/* Card control registers and their bit definitions */
+#define IF_CS_HOST_CMD 0x0000001A
+#define IF_CS_HOST_CMD_LEN 0x00000018
-#define IF_CS_C_STATUS 0x00000020
-#define IF_CS_C_S_TX_DNLD_RDY 0x0001
-#define IF_CS_C_S_RX_UPLD_RDY 0x0002
-#define IF_CS_C_S_CMD_DNLD_RDY 0x0004
-#define IF_CS_C_S_CMD_UPLD_RDY 0x0008
-#define IF_CS_C_S_CARDEVENT 0x0010
-#define IF_CS_C_S_MASK 0x001f
-#define IF_CS_C_S_STATUS_MASK 0x7f00
+#define IF_CS_READ 0x00000010
+#define IF_CS_READ_LEN 0x00000024
-#define IF_CS_C_INT_CAUSE 0x00000022
-#define IF_CS_C_IC_MASK 0x001f
+#define IF_CS_CARD_CMD 0x00000012
+#define IF_CS_CARD_CMD_LEN 0x00000030
-#define IF_CS_C_SQ_READ_LOW 0x00000028
-#define IF_CS_C_SQ_HELPER_OK 0x10
+#define IF_CS_CARD_STATUS 0x00000020
+#define IF_CS_CARD_STATUS_MASK 0x7f00
-#define IF_CS_C_CMD_LEN 0x00000030
+#define IF_CS_CARD_INT_CAUSE 0x00000022
-#define IF_CS_C_CMD 0x00000012
+#define IF_CS_CARD_SQ_READ_LOW 0x00000028
+#define IF_CS_CARD_SQ_HELPER_OK 0x10
#define IF_CS_SCRATCH 0x0000003F
@@ -221,13 +205,13 @@ static int if_cs_poll_while_fw_download(
static inline void if_cs_enable_ints(struct if_cs_card *card)
{
lbs_deb_enter(LBS_DEB_CS);
- if_cs_write16(card, IF_CS_H_INT_MASK, 0);
+ if_cs_write16(card, IF_CS_HOST_INT_MASK, 0);
}
static inline void if_cs_disable_ints(struct if_cs_card *card)
{
lbs_deb_enter(LBS_DEB_CS);
- if_cs_write16(card, IF_CS_H_INT_MASK, IF_CS_H_IM_MASK);
+ if_cs_write16(card, IF_CS_HOST_INT_MASK, IF_CS_BIT_MASK);
}
/*
@@ -244,8 +228,8 @@ static int if_cs_send_cmd(struct lbs_pri
/* Is hardware ready? */
while (1) {
- u16 val = if_cs_read16(card, IF_CS_C_STATUS);
- if (val & IF_CS_C_S_CMD_DNLD_RDY)
+ u16 val = if_cs_read16(card, IF_CS_CARD_STATUS);
+ if (val & IF_CS_BIT_COMMAND)
break;
if (++loops > 100) {
lbs_pr_err("card not ready for commands\n");
@@ -254,20 +238,20 @@ static int if_cs_send_cmd(struct lbs_pri
mdelay(1);
}
- if_cs_write16(card, IF_CS_H_CMD_LEN, nb);
+ if_cs_write16(card, IF_CS_HOST_CMD_LEN, nb);
- if_cs_write16_rep(card, IF_CS_H_CMD, buf, nb / 2);
+ if_cs_write16_rep(card, IF_CS_HOST_CMD, buf, nb / 2);
/* Are we supposed to transfer an odd amount of bytes? */
if (nb & 1)
- if_cs_write8(card, IF_CS_H_CMD, buf[nb-1]);
+ if_cs_write8(card, IF_CS_HOST_CMD, buf[nb-1]);
/* "Assert the download over interrupt command in the Host
* status register" */
- if_cs_write16(card, IF_CS_H_STATUS, IF_CS_H_STATUS_DNLD_OVER);
+ if_cs_write16(card, IF_CS_HOST_STATUS, IF_CS_BIT_COMMAND);
/* "Assert the download over interrupt command in the Card
* interrupt case register" */
- if_cs_write16(card, IF_CS_H_INT_CAUSE, IF_CS_H_IC_DNLD_OVER);
+ if_cs_write16(card, IF_CS_HOST_INT_CAUSE, IF_CS_BIT_COMMAND);
ret = 0;
done:
@@ -287,18 +271,18 @@ static void if_cs_send_data(struct lbs_p
lbs_deb_enter(LBS_DEB_CS);
if_cs_disable_ints(card);
- status = if_cs_read16(card, IF_CS_C_STATUS);
- BUG_ON((status & IF_CS_C_S_TX_DNLD_RDY) == 0);
+ status = if_cs_read16(card, IF_CS_CARD_STATUS);
+ BUG_ON((status & IF_CS_BIT_TX) == 0);
- if_cs_write16(card, IF_CS_H_WRITE_LEN, nb);
+ if_cs_write16(card, IF_CS_HOST_WRITE_LEN, nb);
/* write even number of bytes, then odd byte if necessary */
- if_cs_write16_rep(card, IF_CS_H_WRITE, buf, nb / 2);
+ if_cs_write16_rep(card, IF_CS_HOST_WRITE, buf, nb / 2);
if (nb & 1)
- if_cs_write8(card, IF_CS_H_WRITE, buf[nb-1]);
+ if_cs_write8(card, IF_CS_HOST_WRITE, buf[nb-1]);
- if_cs_write16(card, IF_CS_H_STATUS, IF_CS_H_STATUS_TX_OVER);
- if_cs_write16(card, IF_CS_H_INT_CAUSE, IF_CS_H_STATUS_TX_OVER);
+ if_cs_write16(card, IF_CS_HOST_STATUS, IF_CS_BIT_TX);
+ if_cs_write16(card, IF_CS_HOST_INT_CAUSE, IF_CS_BIT_TX);
if_cs_enable_ints(card);
lbs_deb_leave(LBS_DEB_CS);
@@ -311,27 +295,28 @@ static int if_cs_receive_cmdres(struct l
{
unsigned long flags;
int ret = -1;
- u16 val;
+ u16 status;
lbs_deb_enter(LBS_DEB_CS);
/* is hardware ready? */
- val = if_cs_read16(priv->card, IF_CS_C_STATUS);
- if ((val & IF_CS_C_S_CMD_UPLD_RDY) == 0) {
- lbs_pr_err("card not ready for CMD\n");
+ status = if_cs_read16(priv->card, IF_CS_CARD_STATUS);
+ if ((status & IF_CS_BIT_RESP) == 0) {
+ lbs_pr_err("no cmd response in card\n");
+ *len = 0;
goto out;
}
- *len = if_cs_read16(priv->card, IF_CS_C_CMD_LEN);
+ *len = if_cs_read16(priv->card, IF_CS_CARD_CMD_LEN);
if ((*len == 0) || (*len > LBS_CMD_BUFFER_SIZE)) {
lbs_pr_err("card cmd buffer has invalid # of bytes (%d)\n", *len);
goto out;
}
/* read even number of bytes, then odd byte if necessary */
- if_cs_read16_rep(priv->card, IF_CS_C_CMD, data, *len/sizeof(u16));
+ if_cs_read16_rep(priv->card, IF_CS_CARD_CMD, data, *len/sizeof(u16));
if (*len & 1)
- data[*len-1] = if_cs_read8(priv->card, IF_CS_C_CMD);
+ data[*len-1] = if_cs_read8(priv->card, IF_CS_CARD_CMD);
/* This is a workaround for a firmware that reports too much
* bytes */
@@ -356,7 +341,7 @@ static struct sk_buff *if_cs_receive_dat
lbs_deb_enter(LBS_DEB_CS);
- len = if_cs_read16(priv->card, IF_CS_C_READ_LEN);
+ len = if_cs_read16(priv->card, IF_CS_READ_LEN);
if (len == 0 || len > MRVDRV_ETH_RX_PACKET_BUFFER_SIZE) {
lbs_pr_err("card data buffer has invalid # of bytes (%d)\n", len);
priv->stats.rx_dropped++;
@@ -371,13 +356,13 @@ static struct sk_buff *if_cs_receive_dat
data = skb->data;
/* read even number of bytes, then odd byte if necessary */
- if_cs_read16_rep(priv->card, IF_CS_H_READ, data, len/sizeof(u16));
+ if_cs_read16_rep(priv->card, IF_CS_READ, data, len/sizeof(u16));
if (len & 1)
- data[len-1] = if_cs_read8(priv->card, IF_CS_H_READ);
+ data[len-1] = if_cs_read8(priv->card, IF_CS_READ);
dat_err:
- if_cs_write16(priv->card, IF_CS_H_STATUS, IF_CS_H_STATUS_RX_OVER);
- if_cs_write16(priv->card, IF_CS_H_INT_CAUSE, IF_CS_H_IC_RX_OVER);
+ if_cs_write16(priv->card, IF_CS_HOST_STATUS, IF_CS_BIT_RX);
+ if_cs_write16(priv->card, IF_CS_HOST_INT_CAUSE, IF_CS_BIT_RX);
out:
lbs_deb_leave_args(LBS_DEB_CS, "ret %p", skb);
@@ -393,7 +378,7 @@ static irqreturn_t if_cs_interrupt(int i
lbs_deb_enter(LBS_DEB_CS);
/* Ask card interrupt cause register if there is something for us */
- cause = if_cs_read16(card, IF_CS_C_INT_CAUSE);
+ cause = if_cs_read16(card, IF_CS_CARD_INT_CAUSE);
if (cause == 0) {
/* Not for us */
return IRQ_NONE;
@@ -406,10 +391,10 @@ static irqreturn_t if_cs_interrupt(int i
}
/* Clear interrupt cause */
- if_cs_write16(card, IF_CS_C_INT_CAUSE, cause & IF_CS_C_IC_MASK);
+ if_cs_write16(card, IF_CS_CARD_INT_CAUSE, cause & IF_CS_BIT_MASK);
lbs_deb_cs("cause 0x%04x\n", cause);
- if (cause & IF_CS_C_S_RX_UPLD_RDY) {
+ if (cause & IF_CS_BIT_RX) {
struct sk_buff *skb;
lbs_deb_cs("rx packet\n");
skb = if_cs_receive_data(priv);
@@ -417,12 +402,12 @@ static irqreturn_t if_cs_interrupt(int i
lbs_process_rxed_packet(priv, skb);
}
- if (cause & IF_CS_H_IC_TX_OVER) {
+ if (cause & IF_CS_BIT_TX) {
lbs_deb_cs("tx done\n");
lbs_host_to_card_done(priv);
}
- if (cause & IF_CS_C_S_CMD_UPLD_RDY) {
+ if (cause & IF_CS_BIT_RESP) {
unsigned long flags;
u8 i;
@@ -440,11 +425,11 @@ static irqreturn_t if_cs_interrupt(int i
spin_unlock_irqrestore(&priv->driver_lock, flags);
}
- if (cause & IF_CS_H_IC_HOST_EVENT) {
- u16 event = if_cs_read16(priv->card, IF_CS_C_STATUS)
- & IF_CS_C_S_STATUS_MASK;
- if_cs_write16(priv->card, IF_CS_H_INT_CAUSE,
- IF_CS_H_IC_HOST_EVENT);
+ if (cause & IF_CS_BIT_EVENT) {
+ u16 event = if_cs_read16(priv->card, IF_CS_CARD_STATUS)
+ & IF_CS_CARD_STATUS_MASK;
+ if_cs_write16(priv->card, IF_CS_HOST_INT_CAUSE,
+ IF_CS_BIT_EVENT);
lbs_deb_cs("host event 0x%04x\n", event);
lbs_queue_event(priv, event >> 8 & 0xff);
}
@@ -511,26 +496,26 @@ static int if_cs_prog_helper(struct if_c
/* "write the number of bytes to be sent to the I/O Command
* write length register" */
- if_cs_write16(card, IF_CS_H_CMD_LEN, count);
+ if_cs_write16(card, IF_CS_HOST_CMD_LEN, count);
/* "write this to I/O Command port register as 16 bit writes */
if (count)
- if_cs_write16_rep(card, IF_CS_H_CMD,
+ if_cs_write16_rep(card, IF_CS_HOST_CMD,
&fw->data[sent],
count >> 1);
/* "Assert the download over interrupt command in the Host
* status register" */
- if_cs_write8(card, IF_CS_H_STATUS, IF_CS_H_STATUS_DNLD_OVER);
+ if_cs_write8(card, IF_CS_HOST_STATUS, IF_CS_BIT_COMMAND);
/* "Assert the download over interrupt command in the Card
* interrupt case register" */
- if_cs_write16(card, IF_CS_H_INT_CAUSE, IF_CS_H_IC_DNLD_OVER);
+ if_cs_write16(card, IF_CS_HOST_INT_CAUSE, IF_CS_BIT_COMMAND);
/* "The host polls the Card Status register ... for 50 ms before
declaring a failure */
- ret = if_cs_poll_while_fw_download(card, IF_CS_C_STATUS,
- IF_CS_C_S_CMD_DNLD_RDY);
+ ret = if_cs_poll_while_fw_download(card, IF_CS_CARD_STATUS,
+ IF_CS_BIT_COMMAND);
if (ret < 0) {
lbs_pr_err("can't download helper at 0x%x, ret %d\n",
sent, ret);
@@ -572,14 +557,15 @@ static int if_cs_prog_real(struct if_cs_
}
lbs_deb_cs("fw size %td\n", fw->size);
- ret = if_cs_poll_while_fw_download(card, IF_CS_C_SQ_READ_LOW, IF_CS_C_SQ_HELPER_OK);
+ ret = if_cs_poll_while_fw_download(card, IF_CS_CARD_SQ_READ_LOW,
+ IF_CS_CARD_SQ_HELPER_OK);
if (ret < 0) {
lbs_pr_err("helper firmware doesn't answer\n");
goto err_release;
}
for (sent = 0; sent < fw->size; sent += len) {
- len = if_cs_read16(card, IF_CS_C_SQ_READ_LOW);
+ len = if_cs_read16(card, IF_CS_CARD_SQ_READ_LOW);
if (len & 1) {
retry++;
lbs_pr_info("odd, need to retry this firmware block\n");
@@ -597,16 +583,16 @@ static int if_cs_prog_real(struct if_cs_
}
- if_cs_write16(card, IF_CS_H_CMD_LEN, len);
+ if_cs_write16(card, IF_CS_HOST_CMD_LEN, len);
- if_cs_write16_rep(card, IF_CS_H_CMD,
+ if_cs_write16_rep(card, IF_CS_HOST_CMD,
&fw->data[sent],
(len+1) >> 1);
- if_cs_write8(card, IF_CS_H_STATUS, IF_CS_H_STATUS_DNLD_OVER);
- if_cs_write16(card, IF_CS_H_INT_CAUSE, IF_CS_H_IC_DNLD_OVER);
+ if_cs_write8(card, IF_CS_HOST_STATUS, IF_CS_BIT_COMMAND);
+ if_cs_write16(card, IF_CS_HOST_INT_CAUSE, IF_CS_BIT_COMMAND);
- ret = if_cs_poll_while_fw_download(card, IF_CS_C_STATUS,
- IF_CS_C_S_CMD_DNLD_RDY);
+ ret = if_cs_poll_while_fw_download(card, IF_CS_CARD_STATUS,
+ IF_CS_BIT_COMMAND);
if (ret < 0) {
lbs_pr_err("can't download firmware at 0x%x\n", sent);
goto err_release;
@@ -834,7 +820,7 @@ static int if_cs_probe(struct pcmcia_dev
/* Clear any interrupt cause that happend while sending
* firmware/initializing card */
- if_cs_write16(card, IF_CS_C_INT_CAUSE, IF_CS_C_IC_MASK);
+ if_cs_write16(card, IF_CS_CARD_INT_CAUSE, IF_CS_BIT_MASK);
if_cs_enable_ints(card);
/* And finally bring the card up */
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH, RESEND] libertas: unify various CF-related defines
2008-06-02 7:25 ` [PATCH, RESEND] " Holger Schurig
@ 2008-06-03 0:57 ` John W. Linville
2008-06-03 8:18 ` Holger Schurig
2008-06-03 14:14 ` Dan Williams
0 siblings, 2 replies; 11+ messages in thread
From: John W. Linville @ 2008-06-03 0:57 UTC (permalink / raw)
To: Holger Schurig; +Cc: libertas-dev, Dan Williams, linux-wireless
On Mon, Jun 02, 2008 at 09:25:05AM +0200, Holger Schurig wrote:
> Signed-off-by: Holger Schurig <hs4233@mail.mn-solutions.de>
>=20
> ---
>=20
> John, this patch applies successfully for me on top of
> wireless-testing v2.6.26-rc4-8765-g24e3ad4.
Yes, but then I get this:
CC [M] drivers/net/wireless/libertas/if_usb.o
drivers/net/wireless/libertas/if_usb.c: In function =E2=80=98if_usb_res=
et_olpc_card=E2=80=99:
drivers/net/wireless/libertas/if_usb.c:158: warning: no return statemen=
t in function returning non-void
drivers/net/wireless/libertas/if_usb.c: In function =E2=80=98if_usb_pro=
be=E2=80=99:
drivers/net/wireless/libertas/if_usb.c:248: warning: assignment from in=
compatible pointer type
Are we out of sync?
John
--=20
John W. Linville
linville@tuxdriver.com
--
To unsubscribe from this list: send the line "unsubscribe linux-wireles=
s" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH, RESEND] libertas: unify various CF-related defines
2008-06-03 0:57 ` John W. Linville
@ 2008-06-03 8:18 ` Holger Schurig
2008-06-03 14:03 ` John W. Linville
2008-06-03 14:14 ` Dan Williams
1 sibling, 1 reply; 11+ messages in thread
From: Holger Schurig @ 2008-06-03 8:18 UTC (permalink / raw)
To: John W. Linville; +Cc: libertas-dev, Dan Williams, linux-wireless
On Tuesday 03 June 2008 02:57:19 John W. Linville wrote:
> Yes, but then I get this:
>
> CC [M] drivers/net/wireless/libertas/if_usb.o
> drivers/net/wireless/libertas/if_usb.c: In function
> =E2=80=98if_usb_reset_olpc_card=E2=80=99:
> drivers/net/wireless/libertas/if_usb.c:158: warning: no return
> statement in function returning non-void
> drivers/net/wireless/libertas/if_usb.c: In function
> =E2=80=98if_usb_probe=E2=80=99: drivers/net/wireless/libertas/if_usb.=
c:248:
> warning: assignment from incompatible pointer type
>
> Are we out of sync?
I dunno, because the patch that I posted via "RESEND" doesn't=20
touch if_usb.c, it solely patches if_cs.c. So your problem must=20
have been there independend of my patches.
AFAIK I did not submit any if_usb.c - touching patch now for some=20
months.
--
To unsubscribe from this list: send the line "unsubscribe linux-wireles=
s" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH, RESEND] libertas: unify various CF-related defines
2008-06-03 8:18 ` Holger Schurig
@ 2008-06-03 14:03 ` John W. Linville
0 siblings, 0 replies; 11+ messages in thread
From: John W. Linville @ 2008-06-03 14:03 UTC (permalink / raw)
To: Holger Schurig; +Cc: libertas-dev, Dan Williams, linux-wireless
On Tue, Jun 03, 2008 at 10:18:52AM +0200, Holger Schurig wrote:
> On Tuesday 03 June 2008 02:57:19 John W. Linville wrote:
> > Yes, but then I get this:
> >
> > CC [M] drivers/net/wireless/libertas/if_usb.o
> > drivers/net/wireless/libertas/if_usb.c: In function
> > =E2=80=98if_usb_reset_olpc_card=E2=80=99:
> > drivers/net/wireless/libertas/if_usb.c:158: warning: no return
> > statement in function returning non-void
> > drivers/net/wireless/libertas/if_usb.c: In function
> > =E2=80=98if_usb_probe=E2=80=99: drivers/net/wireless/libertas/if_us=
b.c:248:
> > warning: assignment from incompatible pointer type
> >
> > Are we out of sync?
>=20
> I dunno, because the patch that I posted via "RESEND" doesn't=20
> touch if_usb.c, it solely patches if_cs.c. So your problem must=20
> have been there independend of my patches.
>=20
> AFAIK I did not submit any if_usb.c - touching patch now for some=20
> months.
You're right, I'm sorry. I neglected to delete if_usb.o, so the
warning "magically" went away when I rebuilt without your patch... :-(
John
--=20
John W. Linville
linville@tuxdriver.com
--
To unsubscribe from this list: send the line "unsubscribe linux-wireles=
s" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH, RESEND] libertas: unify various CF-related defines
2008-06-03 0:57 ` John W. Linville
2008-06-03 8:18 ` Holger Schurig
@ 2008-06-03 14:14 ` Dan Williams
2008-06-03 14:58 ` [PATCH] libertas: fixup if_usb_reset_olpc_card warnings for OLPC John W. Linville
2008-06-03 14:59 ` [PATCH, RESEND] libertas: unify various CF-related defines John W. Linville
1 sibling, 2 replies; 11+ messages in thread
From: Dan Williams @ 2008-06-03 14:14 UTC (permalink / raw)
To: John W. Linville; +Cc: Holger Schurig, libertas-dev, linux-wireless
On Mon, 2008-06-02 at 20:57 -0400, John W. Linville wrote:
> On Mon, Jun 02, 2008 at 09:25:05AM +0200, Holger Schurig wrote:
> > Signed-off-by: Holger Schurig <hs4233@mail.mn-solutions.de>
> >=20
> > ---
> >=20
> > John, this patch applies successfully for me on top of
> > wireless-testing v2.6.26-rc4-8765-g24e3ad4.
>=20
> Yes, but then I get this:
>=20
> CC [M] drivers/net/wireless/libertas/if_usb.o
> drivers/net/wireless/libertas/if_usb.c: In function =E2=80=98if_usb_r=
eset_olpc_card=E2=80=99:
> drivers/net/wireless/libertas/if_usb.c:158: warning: no return statem=
ent in function returning non-void
> drivers/net/wireless/libertas/if_usb.c: In function =E2=80=98if_usb_p=
robe=E2=80=99:
> drivers/net/wireless/libertas/if_usb.c:248: warning: assignment from =
incompatible pointer type
>=20
> Are we out of sync?
Holger's patch shouldn't touch if_usb.c at all; these errors would be
the OLPC reset card patch that Woodhouse posted a week or two back most
likely.
dan
--
To unsubscribe from this list: send the line "unsubscribe linux-wireles=
s" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH] libertas: fixup if_usb_reset_olpc_card warnings for OLPC
2008-06-03 14:14 ` Dan Williams
@ 2008-06-03 14:58 ` John W. Linville
2008-06-03 14:59 ` [PATCH, RESEND] libertas: unify various CF-related defines John W. Linville
1 sibling, 0 replies; 11+ messages in thread
From: John W. Linville @ 2008-06-03 14:58 UTC (permalink / raw)
To: linux-wireless
Cc: Holger Schurig, libertas-dev, Dan Williams, John W. Linville,
David Woodhouse
commit 39663ff54367064e861394f14fa6f3803cf00914 ("libertas: provide
reset_card() callback on OLPC") introduced a pair of warnings:
CC [M] drivers/net/wireless/libertas/if_usb.o
drivers/net/wireless/libertas/if_usb.c: In function =E2=80=98if_usb_res=
et_olpc_card=E2=80=99:
drivers/net/wireless/libertas/if_usb.c:158: warning: no return statemen=
t in function returning non-void
drivers/net/wireless/libertas/if_usb.c: In function =E2=80=98if_usb_pro=
be=E2=80=99: drivers/net/wireless/libertas/if_usb.c:248: warning: assig=
nment from incompatible pointer type
Cc: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
---
I'll fold this into the original patch, which has not yet been sent
upstream.
drivers/net/wireless/libertas/if_usb.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wirel=
ess/libertas/if_usb.c
index 8a7eb63..2478310 100644
--- a/drivers/net/wireless/libertas/if_usb.c
+++ b/drivers/net/wireless/libertas/if_usb.c
@@ -151,7 +151,7 @@ static void if_usb_fw_timeo(unsigned long priv)
}
=20
#ifdef CONFIG_OLPC
-static int if_usb_reset_olpc_card(struct lbs_private *priv)
+static void if_usb_reset_olpc_card(struct lbs_private *priv)
{
printk(KERN_CRIT "Resetting OLPC wireless via EC...\n");
olpc_ec_cmd(0x25, NULL, 0, NULL, 0);
--=20
1.5.5.1
--
To unsubscribe from this list: send the line "unsubscribe linux-wireles=
s" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 11+ messages in thread* Re: [PATCH, RESEND] libertas: unify various CF-related defines
2008-06-03 14:14 ` Dan Williams
2008-06-03 14:58 ` [PATCH] libertas: fixup if_usb_reset_olpc_card warnings for OLPC John W. Linville
@ 2008-06-03 14:59 ` John W. Linville
1 sibling, 0 replies; 11+ messages in thread
From: John W. Linville @ 2008-06-03 14:59 UTC (permalink / raw)
To: Dan Williams; +Cc: Holger Schurig, libertas-dev, linux-wireless
On Tue, Jun 03, 2008 at 10:14:16AM -0400, Dan Williams wrote:
> On Mon, 2008-06-02 at 20:57 -0400, John W. Linville wrote:
> > On Mon, Jun 02, 2008 at 09:25:05AM +0200, Holger Schurig wrote:
> > > Signed-off-by: Holger Schurig <hs4233@mail.mn-solutions.de>
> > >=20
> > > ---
> > >=20
> > > John, this patch applies successfully for me on top of
> > > wireless-testing v2.6.26-rc4-8765-g24e3ad4.
> >=20
> > Yes, but then I get this:
> >=20
> > CC [M] drivers/net/wireless/libertas/if_usb.o
> > drivers/net/wireless/libertas/if_usb.c: In function =E2=80=98if_usb=
_reset_olpc_card=E2=80=99:
> > drivers/net/wireless/libertas/if_usb.c:158: warning: no return stat=
ement in function returning non-void
> > drivers/net/wireless/libertas/if_usb.c: In function =E2=80=98if_usb=
_probe=E2=80=99:
> > drivers/net/wireless/libertas/if_usb.c:248: warning: assignment fro=
m incompatible pointer type
> >=20
> > Are we out of sync?
>=20
> Holger's patch shouldn't touch if_usb.c at all; these errors would be
> the OLPC reset card patch that Woodhouse posted a week or two back mo=
st
> likely.
Indeed...I just sent a one-liner to fix the warning. I'll fold it
into the original before the actual merge to davem.
John
--=20
John W. Linville
linville@tuxdriver.com
--
To unsubscribe from this list: send the line "unsubscribe linux-wireles=
s" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2008-06-03 15:32 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-05-26 10:50 [PATCH, take 2] libertas: unify various CF-related defines Holger Schurig
2008-05-27 20:14 ` Dan Williams
2008-05-30 15:41 ` John W. Linville
2008-06-02 6:41 ` Holger Schurig
2008-06-02 7:25 ` [PATCH, RESEND] " Holger Schurig
2008-06-03 0:57 ` John W. Linville
2008-06-03 8:18 ` Holger Schurig
2008-06-03 14:03 ` John W. Linville
2008-06-03 14:14 ` Dan Williams
2008-06-03 14:58 ` [PATCH] libertas: fixup if_usb_reset_olpc_card warnings for OLPC John W. Linville
2008-06-03 14:59 ` [PATCH, RESEND] libertas: unify various CF-related defines John W. Linville
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.