PERFORCE change 132319 for review
Hans Petter Selasky
hselasky at FreeBSD.org
Wed Jan 2 10:26:44 PST 2008
http://perforce.freebsd.org/chv.cgi?CH=132319
Change 132319 by hselasky at hselasky_laptop001 on 2008/01/02 18:25:46
Style change by "usb_style.sh".
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb/if_zyd.c#33 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb/if_zyd.c#33 (text+ko) ====
@@ -81,7 +81,7 @@
#endif
#undef INDEXES
-#define INDEXES(a) (sizeof(a) / sizeof((a)[0]))
+#define INDEXES(a) (sizeof(a) / sizeof((a)[0]))
struct mq { /* mini-queue */
struct mbuf *ifq_head;
@@ -117,7 +117,7 @@
static usbd_config_td_command_t zyd_cfg_amrr_timeout;
static uint8_t zyd_plcp2ieee(uint8_t signal, uint8_t isofdm);
-static struct ieee80211_node * zyd_node_alloc_cb(struct ieee80211_node_table *nt);
+static struct ieee80211_node *zyd_node_alloc_cb(struct ieee80211_node_table *nt);
static void zyd_cfg_usbrequest(struct zyd_softc *sc, usb_device_request_t *req, uint8_t *data);
static void zyd_cfg_usb_intr_read(struct zyd_softc *sc, void *data, uint32_t size);
static void zyd_cfg_usb_intr_write(struct zyd_softc *sc, const void *data, uint16_t code, uint32_t size);
@@ -163,62 +163,63 @@
/* various supported device vendors/products */
struct zyd_type {
- struct usb_devno dev;
- uint8_t rev;
-#define ZYD_ZD1211 0
-#define ZYD_ZD1211B 1
+ struct usb_devno dev;
+ uint8_t rev;
+#define ZYD_ZD1211 0
+#define ZYD_ZD1211B 1
};
static const struct zyd_type zyd_devs[] = {
- /* ZYD_ZD1211 */
- { { USB_VENDOR_3COM2, USB_PRODUCT_3COM2_3CRUSB10075 }, ZYD_ZD1211 },
- { { USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_WL54 }, ZYD_ZD1211 },
- { { USB_VENDOR_ASUS, USB_PRODUCT_ASUS_WL159G }, ZYD_ZD1211 },
- { { USB_VENDOR_CYBERTAN, USB_PRODUCT_CYBERTAN_TG54USB }, ZYD_ZD1211 },
- { { USB_VENDOR_DRAYTEK, USB_PRODUCT_DRAYTEK_VIGOR550 }, ZYD_ZD1211 },
- { { USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS54GD }, ZYD_ZD1211 },
- { { USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS54GZL }, ZYD_ZD1211 },
- { { USB_VENDOR_PLANEX3, USB_PRODUCT_PLANEX3_GWUS54GZ }, ZYD_ZD1211 },
- { { USB_VENDOR_PLANEX3, USB_PRODUCT_PLANEX3_GWUS54MINI }, ZYD_ZD1211 },
- { { USB_VENDOR_SAGEM, USB_PRODUCT_SAGEM_XG760A }, ZYD_ZD1211 },
- { { USB_VENDOR_SENAO, USB_PRODUCT_SENAO_NUB8301 }, ZYD_ZD1211 },
- { { USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL113 }, ZYD_ZD1211 },
- { { USB_VENDOR_SWEEX, USB_PRODUCT_SWEEX_ZD1211 }, ZYD_ZD1211 },
- { { USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_QUICKWLAN }, ZYD_ZD1211 },
- { { USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_ZD1211_1 }, ZYD_ZD1211 },
- { { USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_ZD1211_2 }, ZYD_ZD1211 },
- { { USB_VENDOR_TWINMOS, USB_PRODUCT_TWINMOS_G240 }, ZYD_ZD1211 },
- { { USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_ALL0298V2 }, ZYD_ZD1211 },
- { { USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW429UB_A }, ZYD_ZD1211 },
- { { USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW429UB }, ZYD_ZD1211 },
- { { USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_UR055G }, ZYD_ZD1211 },
- { { USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_ZD1211 }, ZYD_ZD1211 },
- { { USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ZD1211 }, ZYD_ZD1211 },
- { { USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_AG225H }, ZYD_ZD1211 },
- { { USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_ZYAIRG220 }, ZYD_ZD1211 },
- { { USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G200V2 }, ZYD_ZD1211 },
- /* ZYD_ZD1211B */
- { { USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_SMCWUSBG }, ZYD_ZD1211B },
- { { USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_ZD1211B }, ZYD_ZD1211B },
- { { USB_VENDOR_ASUS, USB_PRODUCT_ASUS_A9T_WIFI }, ZYD_ZD1211B },
- { { USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D7050_V4000 }, ZYD_ZD1211B },
- { { USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_ZD1211B }, ZYD_ZD1211B },
- { { USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSBF54G }, ZYD_ZD1211B },
- { { USB_VENDOR_FIBERLINE, USB_PRODUCT_FIBERLINE_WL430U }, ZYD_ZD1211B },
- { { USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KG54L }, ZYD_ZD1211B },
- { { USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_SNU5600 }, ZYD_ZD1211B },
- { { USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GW_US54GXS }, ZYD_ZD1211B },
- { { USB_VENDOR_SAGEM, USB_PRODUCT_SAGEM_XG76NA }, ZYD_ZD1211B },
- { { USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_ZD1211B }, ZYD_ZD1211B },
- { { USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW429UBC1 }, ZYD_ZD1211B },
- { { USB_VENDOR_USR, USB_PRODUCT_USR_USR5423 }, ZYD_ZD1211B },
- { { USB_VENDOR_VTECH, USB_PRODUCT_VTECH_ZD1211B }, ZYD_ZD1211B },
- { { USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_ZD1211B }, ZYD_ZD1211B },
- { { USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ZD1211B }, ZYD_ZD1211B },
- { { USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_M202 }, ZYD_ZD1211B },
- { { USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G220V2 }, ZYD_ZD1211B },
+ /* ZYD_ZD1211 */
+ {{USB_VENDOR_3COM2, USB_PRODUCT_3COM2_3CRUSB10075}, ZYD_ZD1211},
+ {{USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_WL54}, ZYD_ZD1211},
+ {{USB_VENDOR_ASUS, USB_PRODUCT_ASUS_WL159G}, ZYD_ZD1211},
+ {{USB_VENDOR_CYBERTAN, USB_PRODUCT_CYBERTAN_TG54USB}, ZYD_ZD1211},
+ {{USB_VENDOR_DRAYTEK, USB_PRODUCT_DRAYTEK_VIGOR550}, ZYD_ZD1211},
+ {{USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS54GD}, ZYD_ZD1211},
+ {{USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS54GZL}, ZYD_ZD1211},
+ {{USB_VENDOR_PLANEX3, USB_PRODUCT_PLANEX3_GWUS54GZ}, ZYD_ZD1211},
+ {{USB_VENDOR_PLANEX3, USB_PRODUCT_PLANEX3_GWUS54MINI}, ZYD_ZD1211},
+ {{USB_VENDOR_SAGEM, USB_PRODUCT_SAGEM_XG760A}, ZYD_ZD1211},
+ {{USB_VENDOR_SENAO, USB_PRODUCT_SENAO_NUB8301}, ZYD_ZD1211},
+ {{USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL113}, ZYD_ZD1211},
+ {{USB_VENDOR_SWEEX, USB_PRODUCT_SWEEX_ZD1211}, ZYD_ZD1211},
+ {{USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_QUICKWLAN}, ZYD_ZD1211},
+ {{USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_ZD1211_1}, ZYD_ZD1211},
+ {{USB_VENDOR_TEKRAM, USB_PRODUCT_TEKRAM_ZD1211_2}, ZYD_ZD1211},
+ {{USB_VENDOR_TWINMOS, USB_PRODUCT_TWINMOS_G240}, ZYD_ZD1211},
+ {{USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_ALL0298V2}, ZYD_ZD1211},
+ {{USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW429UB_A}, ZYD_ZD1211},
+ {{USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW429UB}, ZYD_ZD1211},
+ {{USB_VENDOR_WISTRONNEWEB, USB_PRODUCT_WISTRONNEWEB_UR055G}, ZYD_ZD1211},
+ {{USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_ZD1211}, ZYD_ZD1211},
+ {{USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ZD1211}, ZYD_ZD1211},
+ {{USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_AG225H}, ZYD_ZD1211},
+ {{USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_ZYAIRG220}, ZYD_ZD1211},
+ {{USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G200V2}, ZYD_ZD1211},
+ /* ZYD_ZD1211B */
+ {{USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_SMCWUSBG}, ZYD_ZD1211B},
+ {{USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_ZD1211B}, ZYD_ZD1211B},
+ {{USB_VENDOR_ASUS, USB_PRODUCT_ASUS_A9T_WIFI}, ZYD_ZD1211B},
+ {{USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D7050_V4000}, ZYD_ZD1211B},
+ {{USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_ZD1211B}, ZYD_ZD1211B},
+ {{USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSBF54G}, ZYD_ZD1211B},
+ {{USB_VENDOR_FIBERLINE, USB_PRODUCT_FIBERLINE_WL430U}, ZYD_ZD1211B},
+ {{USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KG54L}, ZYD_ZD1211B},
+ {{USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_SNU5600}, ZYD_ZD1211B},
+ {{USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GW_US54GXS}, ZYD_ZD1211B},
+ {{USB_VENDOR_SAGEM, USB_PRODUCT_SAGEM_XG76NA}, ZYD_ZD1211B},
+ {{USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_ZD1211B}, ZYD_ZD1211B},
+ {{USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_TEW429UBC1}, ZYD_ZD1211B},
+ {{USB_VENDOR_USR, USB_PRODUCT_USR_USR5423}, ZYD_ZD1211B},
+ {{USB_VENDOR_VTECH, USB_PRODUCT_VTECH_ZD1211B}, ZYD_ZD1211B},
+ {{USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_ZD1211B}, ZYD_ZD1211B},
+ {{USB_VENDOR_ZYDAS, USB_PRODUCT_ZYDAS_ZD1211B}, ZYD_ZD1211B},
+ {{USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_M202}, ZYD_ZD1211B},
+ {{USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_G220V2}, ZYD_ZD1211B},
};
-#define zyd_lookup(v, p) \
+
+#define zyd_lookup(v, p) \
((const struct zyd_type *)usb_lookup(zyd_devs, v, p))
static const struct usbd_config zyd_config[ZYD_N_TRANSFER] = {
@@ -332,15 +333,17 @@
static uint8_t
zyd_plcp2ieee(uint8_t signal, uint8_t isofdm)
{
- if (isofdm) {
- static const uint8_t ofdmrates[16] =
- { 0, 0, 0, 0, 0, 0, 0, 96, 48, 24, 12, 108, 72, 36, 18 };
- return ofdmrates[signal & 0xf];
- } else {
- static const uint8_t cckrates[16] =
- { 0, 0, 0, 0, 4, 0, 0, 11, 0, 0, 2, 0, 0, 0, 22, 0 };
- return cckrates[signal & 0xf];
- }
+ if (isofdm) {
+ static const uint8_t ofdmrates[16] =
+ {0, 0, 0, 0, 0, 0, 0, 96, 48, 24, 12, 108, 72, 36, 18};
+
+ return ofdmrates[signal & 0xf];
+ } else {
+ static const uint8_t cckrates[16] =
+ {0, 0, 0, 0, 4, 0, 0, 11, 0, 0, 2, 0, 0, 0, 22, 0};
+
+ return cckrates[signal & 0xf];
+ }
}
/* ARGUSED */
@@ -348,6 +351,7 @@
zyd_node_alloc_cb(struct ieee80211_node_table *nt __unused)
{
struct zyd_node *zn;
+
zn = malloc(sizeof(struct zyd_node), M_80211_NODE, M_WAITOK | M_ZERO);
return ((zn != NULL) ? (&zn->ni) : NULL);
}
@@ -370,7 +374,7 @@
if (err) {
DPRINTF(sc, -1, "%s: device request failed, err=%s "
- "(ignored)\n", sc->sc_name, usbd_errstr(err));
+ "(ignored)\n", sc->sc_name, usbd_errstr(err));
error:
length = UGETW(req->wLength);
@@ -420,7 +424,7 @@
usbd_copy_out(xfer->frbuffers + 0, 0,
&(sc->sc_intr_ibuf), actlen);
- switch(cmd->code) {
+ switch (cmd->code) {
case htole16(ZYD_NOTIF_RETRYSTATUS):
goto handle_notif_retrystatus;
case htole16(ZYD_NOTIF_IORD):
@@ -433,19 +437,18 @@
/* fallthrough */
case USBD_ST_SETUP:
- tr_setup:
+tr_setup:
if (sc->sc_flags & ZYD_FLAG_INTR_READ_STALL) {
usbd_transfer_start(sc->sc_xfer[ZYD_TR_INTR_CS_RD]);
break;
}
-
xfer->frlengths[0] = xfer->max_data_length;
usbd_start_hardware(xfer);
break;
default: /* Error */
- DPRINTF(sc, 2, "error = %s\n",
- usbd_errstr(xfer->error));
+ DPRINTF(sc, 2, "error = %s\n",
+ usbd_errstr(xfer->error));
if (xfer->error != USBD_CANCELLED) {
/* try to clear stall first */
@@ -462,89 +465,85 @@
}
return;
-handle_notif_retrystatus: {
+handle_notif_retrystatus:{
+
+ struct zyd_notif_retry *retry = (void *)(cmd->data);
+ struct ieee80211com *ic = &sc->sc_ic;
+ struct ifnet *ifp = sc->sc_ifp;
+ struct ieee80211_node *ni;
- struct zyd_notif_retry *retry = (void *)(cmd->data);
- struct ieee80211com *ic = &sc->sc_ic;
- struct ifnet *ifp = sc->sc_ifp;
- struct ieee80211_node *ni;
+ DPRINTF(sc, 0, "retry intr: rate=0x%x "
+ "addr=%02x:%02x:%02x:%02x:%02x:%02x count=%d (0x%x)\n",
+ le16toh(retry->rate), retry->macaddr[0], retry->macaddr[1],
+ retry->macaddr[2], retry->macaddr[3], retry->macaddr[4],
+ retry->macaddr[5], le16toh(retry->count) & 0xff,
+ le16toh(retry->count));
- DPRINTF(sc, 0, "retry intr: rate=0x%x "
- "addr=%02x:%02x:%02x:%02x:%02x:%02x count=%d (0x%x)\n",
- le16toh(retry->rate), retry->macaddr[0], retry->macaddr[1],
- retry->macaddr[2], retry->macaddr[3], retry->macaddr[4],
- retry->macaddr[5], le16toh(retry->count) & 0xff,
- le16toh(retry->count));
+ /*
+ * Find the node to which the packet was sent and update its
+ * retry statistics. In BSS mode, this node is the AP we're
+ * associated to so no lookup is actually needed.
+ */
+ if (ic->ic_opmode != IEEE80211_M_STA) {
+ ni = ieee80211_find_node(&ic->ic_sta, retry->macaddr);
+ } else {
+ ni = ic->ic_bss;
+ }
+ if (ni == NULL) {
+ goto tr_setup;
+ }
+ ((struct zyd_node *)ni)->amn.amn_retrycnt++;
- /*
- * Find the node to which the packet was sent and update its
- * retry statistics. In BSS mode, this node is the AP we're
- * associated to so no lookup is actually needed.
- */
- if (ic->ic_opmode != IEEE80211_M_STA) {
- ni = ieee80211_find_node(&ic->ic_sta, retry->macaddr);
- } else {
- ni = ic->ic_bss;
- }
- if (ni == NULL) {
+ if (retry->count & htole16(0x100)) {
+ ifp->if_oerrors++; /* too many retries */
+ }
goto tr_setup;
}
- ((struct zyd_node *)ni)->amn.amn_retrycnt++;
+handle_notif_iord:
- if (retry->count & htole16(0x100)) {
- ifp->if_oerrors++; /* too many retries */
+ if (*(uint16_t *)cmd->data == htole16(ZYD_CR_INTERRUPT)) {
+ goto tr_setup; /* HMAC interrupt */
+ }
+ if (actlen < 4) {
+ goto tr_setup; /* too short */
}
- goto tr_setup;
-}
+ actlen -= 4;
-handle_notif_iord:
-
- if (*(uint16_t *)cmd->data == htole16(ZYD_CR_INTERRUPT)) {
- goto tr_setup; /* HMAC interrupt */
- }
-
- if (actlen < 4) {
- goto tr_setup; /* too short */
- }
-
- actlen -= 4;
-
- if (actlen != sc->sc_intr_ilen) {
+ if (actlen != sc->sc_intr_ilen) {
DPRINTF(sc, -1, "unexpected length %u != %u\n",
actlen, sc->sc_intr_ilen);
- goto tr_setup; /* invalid length */
- }
+ goto tr_setup; /* invalid length */
+ }
+ actlen /= 4;
- actlen /= 4;
-
- /* verify register values */
- for (x = 0; x != actlen; x++) {
- if (sc->sc_intr_obuf.data[(2*x)] !=
- sc->sc_intr_ibuf.data[(4*x)]) {
+ /* verify register values */
+ for (x = 0; x != actlen; x++) {
+ if (sc->sc_intr_obuf.data[(2 * x)] !=
+ sc->sc_intr_ibuf.data[(4 * x)]) {
/* invalid register */
- DPRINTF(sc, 0, "Invalid register (1)!\n");
- goto tr_setup;
+ DPRINTF(sc, 0, "Invalid register (1)!\n");
+ goto tr_setup;
}
- if (sc->sc_intr_obuf.data[(2*x) + 1] !=
- sc->sc_intr_ibuf.data[(4*x) + 1]) {
+ if (sc->sc_intr_obuf.data[(2 * x) + 1] !=
+ sc->sc_intr_ibuf.data[(4 * x) + 1]) {
/* invalid register */
- DPRINTF(sc, 0, "Invalid register (2)!\n");
- goto tr_setup;
+ DPRINTF(sc, 0, "Invalid register (2)!\n");
+ goto tr_setup;
}
- }
+ }
- if (sc->sc_intr_iwakeup) {
- sc->sc_intr_iwakeup = 0;
- wakeup(&(sc->sc_intr_iwakeup));
- } else {
- sc->sc_intr_iwakeup = 1;
- }
- /*
- * We pause reading data from the interrupt endpoint until
- * the data has been picked up!
- */
- return;
+ if (sc->sc_intr_iwakeup) {
+ sc->sc_intr_iwakeup = 0;
+ wakeup(&(sc->sc_intr_iwakeup));
+ } else {
+ sc->sc_intr_iwakeup = 1;
+ }
+ /*
+ * We pause reading data from the interrupt endpoint until the data
+ * has been picked up!
+ */
+ return;
}
/*
@@ -561,13 +560,11 @@
bzero(data, size);
goto done;
}
-
if (sc->sc_intr_iwakeup) {
- DPRINTF(sc, 0, "got data already!\n");
- sc->sc_intr_iwakeup = 0;
- goto got_data;
+ DPRINTF(sc, 0, "got data already!\n");
+ sc->sc_intr_iwakeup = 0;
+ goto got_data;
}
-
/* else wait for data */
sc->sc_intr_iwakeup = 1;
@@ -577,22 +574,22 @@
while (sc->sc_intr_iwakeup) {
if (mtx_sleep(&(sc->sc_intr_iwakeup), &(sc->sc_mtx), 0,
- "zyd-ird", hz/2)) {
+ "zyd-ird", hz / 2)) {
/* should not happen */
}
- if (usbd_config_td_is_gone(&(sc->sc_config_td))) {
- sc->sc_intr_iwakeup = 0;
- bzero(data, size);
- goto done;
+ if (usbd_config_td_is_gone(&(sc->sc_config_td))) {
+ sc->sc_intr_iwakeup = 0;
+ bzero(data, size);
+ goto done;
+ }
}
- }
got_data:
bcopy(sc->sc_intr_ibuf.data, data, size);
- /*
- * We have fetched the data from the shared buffer and it is
- * safe to restart the interrupt transfer!
+ /*
+ * We have fetched the data from the shared buffer and it is safe to
+ * restart the interrupt transfer!
*/
usbd_transfer_start(sc->sc_xfer[ZYD_TR_INTR_DT_RD]);
done:
@@ -639,8 +636,8 @@
break;
default: /* Error */
- DPRINTF(sc, 2, "error = %s\n",
- usbd_errstr(xfer->error));
+ DPRINTF(sc, 2, "error = %s\n",
+ usbd_errstr(xfer->error));
if (xfer->error != USBD_CANCELLED) {
/* try to clear stall first */
@@ -653,8 +650,8 @@
wakeup:
if (sc->sc_intr_owakeup) {
- sc->sc_intr_owakeup = 0;
- wakeup(&(sc->sc_intr_owakeup));
+ sc->sc_intr_owakeup = 0;
+ wakeup(&(sc->sc_intr_owakeup));
}
return;
}
@@ -666,8 +663,8 @@
* full speed mode, EP4 is bulk out, not interrupt out.
*/
static void
-zyd_cfg_usb_intr_write(struct zyd_softc *sc, const void *data,
-uint16_t code, uint32_t size)
+zyd_cfg_usb_intr_write(struct zyd_softc *sc, const void *data,
+ uint16_t code, uint32_t size)
{
if (size > sizeof(sc->sc_intr_obuf.data)) {
DPRINTF(sc, -1, "truncating transfer size!\n");
@@ -685,14 +682,13 @@
usbd_transfer_start(sc->sc_xfer[ZYD_TR_INTR_DT_WR]);
while (sc->sc_intr_owakeup) {
- if (mtx_sleep(&(sc->sc_intr_owakeup), &(sc->sc_mtx), 0,
- "zyd-iwr", hz/2)) {
- }
-
- if (usbd_config_td_is_gone(&(sc->sc_config_td))) {
- sc->sc_intr_owakeup = 0;
- goto done;
- }
+ if (mtx_sleep(&(sc->sc_intr_owakeup), &(sc->sc_mtx), 0,
+ "zyd-iwr", hz / 2)) {
+ }
+ if (usbd_config_td_is_gone(&(sc->sc_config_td))) {
+ sc->sc_intr_owakeup = 0;
+ goto done;
+ }
}
done:
return;
@@ -714,9 +710,10 @@
zyd_cfg_read16(struct zyd_softc *sc, uint16_t addr, uint16_t *value)
{
struct zyd_pair tmp[1];
+
addr = htole16(addr);
zyd_cfg_cmd(sc, ZYD_CMD_IORD, &addr, sizeof(addr),
- tmp, sizeof(tmp), ZYD_CMD_FLAG_READ);
+ tmp, sizeof(tmp), ZYD_CMD_FLAG_READ);
*value = le16toh(tmp[0].val);
return;
}
@@ -732,8 +729,8 @@
regs[0] = htole16(regs[0]);
regs[1] = htole16(regs[1]);
- zyd_cfg_cmd(sc, ZYD_CMD_IORD, regs, sizeof(regs),
- tmp, sizeof(tmp), ZYD_CMD_FLAG_READ);
+ zyd_cfg_cmd(sc, ZYD_CMD_IORD, regs, sizeof(regs),
+ tmp, sizeof(tmp), ZYD_CMD_FLAG_READ);
*value = (le16toh(tmp[0].val) << 16) | le16toh(tmp[1].val);
return;
}
@@ -778,7 +775,7 @@
zyd_cfg_read16(sc, ZYD_CR203, &cr203);
cr203 &= ~(ZYD_RF_IF_LE | ZYD_RF_CLK | ZYD_RF_DATA);
- req.code = htole16(2);
+ req.code = htole16(2);
req.width = htole16(rf->width);
for (i = 0; i != rf->width; i++) {
req.bit[i] = htole16(cr203);
@@ -804,12 +801,12 @@
}
static void
-zyd_bulk_read_callback_sub(struct usbd_xfer *xfer, struct mq *mq,
+zyd_bulk_read_callback_sub(struct usbd_xfer *xfer, struct mq *mq,
uint32_t offset, uint16_t len)
{
- enum {
- ZYD_OVERHEAD = (ZYD_HW_PADDING + IEEE80211_CRC_LEN),
- };
+ enum {
+ ZYD_OVERHEAD = (ZYD_HW_PADDING + IEEE80211_CRC_LEN),
+ };
struct zyd_softc *sc = xfer->priv_sc;
struct ifnet *ifp = sc->sc_ifp;
struct zyd_plcphdr plcp;
@@ -818,29 +815,27 @@
if (len < ZYD_OVERHEAD) {
DPRINTF(sc, 0, "frame too "
- "short (length=%d)\n", len);
+ "short (length=%d)\n", len);
ifp->if_ierrors++;
return;
}
-
usbd_copy_out(xfer->frbuffers + 0, offset, &plcp, sizeof(plcp));
- usbd_copy_out(xfer->frbuffers + 0, offset + len - sizeof(stat),
- &stat, sizeof(stat));
+ usbd_copy_out(xfer->frbuffers + 0, offset + len - sizeof(stat),
+ &stat, sizeof(stat));
if (stat.flags & ZYD_RX_ERROR) {
DPRINTF(sc, 0, "RX status indicated "
- "error (0x%02x)\n", stat.flags);
+ "error (0x%02x)\n", stat.flags);
ifp->if_ierrors++;
return;
}
-
/* compute actual frame length */
len -= ZYD_OVERHEAD;
/* allocate a mbuf to store the frame */
if (len > MCLBYTES) {
DPRINTF(sc, 0, "too large frame, "
- "%u bytes\n", len);
+ "%u bytes\n", len);
return;
} else if (len > MHLEN)
m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR);
@@ -856,8 +851,8 @@
m->m_pkthdr.len = len;
m->m_len = len;
- usbd_copy_out(xfer->frbuffers + 0, offset +
- sizeof(plcp), m->m_data, len);
+ usbd_copy_out(xfer->frbuffers + 0, offset +
+ sizeof(plcp), m->m_data, len);
if (bpf_peers_present(sc->sc_drvbpf)) {
struct zyd_rx_radiotap_header *tap = &sc->sc_rxtap;
@@ -871,15 +866,13 @@
tap->wr_rate =
zyd_plcp2ieee(plcp.signal, stat.flags & ZYD_RX_OFDM);
tap->wr_antsignal = stat.rssi + -95;
- tap->wr_antnoise = -95; /* XXX */
+ tap->wr_antnoise = -95; /* XXX */
bpf_mtap2(sc->sc_drvbpf, tap, sc->sc_rxtap_len, m);
}
-
if (sizeof(m->m_hdr.pad) > 0) {
- m->m_hdr.pad[0] = stat.rssi; /* XXX hack */
+ m->m_hdr.pad[0] = stat.rssi; /* XXX hack */
}
-
_IF_ENQUEUE(mq, m);
return;
@@ -903,7 +896,7 @@
switch (USBD_GET_STATE(xfer)) {
case USBD_ST_TRANSFERRED:
- if (xfer->actlen < MAX(sizeof(rx_desc),ZYD_MIN_FRAGSZ)) {
+ if (xfer->actlen < MAX(sizeof(rx_desc), ZYD_MIN_FRAGSZ)) {
DPRINTF(sc, -1, "xfer too short, %d bytes\n", xfer->actlen);
ifp->if_ierrors++;
goto tr_setup;
@@ -916,28 +909,30 @@
offset = 0;
DPRINTF(sc, 3, "received multi-frame transfer, "
- "%u bytes\n", xfer->actlen);
+ "%u bytes\n", xfer->actlen);
for (x = 0; x < ZYD_MAX_RXFRAMECNT; x++) {
- len16 = UGETW(rx_desc.len[x]);
+ len16 = UGETW(rx_desc.len[x]);
- if ((len16 == 0) || (len16 > xfer->actlen)) {
- break;
- }
+ if ((len16 == 0) || (len16 > xfer->actlen)) {
+ break;
+ }
+ zyd_bulk_read_callback_sub(xfer, &mq, offset, len16);
- zyd_bulk_read_callback_sub(xfer, &mq, offset, len16);
-
- /* next frame is aligned on a 32-bit boundary */
- len16 = (len16 + 3) & ~3;
- offset += len16;
- if (len16 > xfer->actlen) {
- break;
- }
- xfer->actlen -= len16;
+ /*
+ * next frame is aligned on a 32-bit
+ * boundary
+ */
+ len16 = (len16 + 3) & ~3;
+ offset += len16;
+ if (len16 > xfer->actlen) {
+ break;
+ }
+ xfer->actlen -= len16;
}
} else {
DPRINTF(sc, 3, "received single-frame transfer, "
- "%u bytes\n", xfer->actlen);
+ "%u bytes\n", xfer->actlen);
zyd_bulk_read_callback_sub(xfer, &mq, 0, xfer->actlen);
}
@@ -968,11 +963,11 @@
if (m == NULL)
break;
- rssi = m->m_hdr.pad[0]; /* XXX hack */
+ rssi = m->m_hdr.pad[0]; /* XXX hack */
ni = ieee80211_find_rxnode(ic, mtod(m, void *));
- ieee80211_input(ic, m, ni, (rssi > 63) ?
- 127 : (2 * rssi), -95/*XXX*/, 0);
+ ieee80211_input(ic, m, ni, (rssi > 63) ?
+ 127 : (2 * rssi), -95 /* XXX */ , 0);
/* node is no longer needed */
ieee80211_free_node(ni);
@@ -1021,21 +1016,20 @@
addr = ZYD_FIRMWARE_START_ADDR;
while (fw_len > 0) {
- if (fw_len < 64) {
- temp = fw_len;
- }
+ if (fw_len < 64) {
+ temp = fw_len;
+ }
+ DPRINTF(sc, 0, "firmware block: fw_len=%u\n", fw_len);
- DPRINTF(sc, 0, "firmware block: fw_len=%u\n", fw_len);
+ USETW(req.wValue, addr);
+ USETW(req.wLength, temp);
- USETW(req.wValue, addr);
- USETW(req.wLength, temp);
+ zyd_cfg_usbrequest(sc, &req,
+ USBD_ADD_BYTES(fw_ptr, 0));
- zyd_cfg_usbrequest(sc, &req,
- USBD_ADD_BYTES(fw_ptr,0));
-
- addr += (temp / 2);
- fw_len -= temp;
- fw_ptr += temp;
+ addr += (temp / 2);
+ fw_len -= temp;
+ fw_ptr += temp;
}
/* check whether the upload succeeded */
@@ -1069,7 +1063,7 @@
return (UMATCH_NONE);
return (zyd_lookup(uaa->vendor, uaa->product) ?
- UMATCH_VENDOR_PRODUCT : UMATCH_NONE);
+ UMATCH_VENDOR_PRODUCT : UMATCH_NONE);
}
/*
@@ -1184,8 +1178,8 @@
{
/* XXX this is probably broken.. */
zyd_cfg_write32(sc, ZYD_CR_ATIM_WND_PERIOD, bintval - 2);
- zyd_cfg_write32(sc, ZYD_CR_PRE_TBTT, bintval - 1);
- zyd_cfg_write32(sc, ZYD_CR_BCN_INTERVAL, bintval);
+ zyd_cfg_write32(sc, ZYD_CR_PRE_TBTT, bintval - 1);
+ zyd_cfg_write32(sc, ZYD_CR_BCN_INTERVAL, bintval);
return;
}
@@ -1195,12 +1189,13 @@
static const char *
zyd_rf_name(uint8_t type)
{
- static const char * const zyd_rfs[] = {
- "unknown", "unknown", "UW2451", "UCHIP", "AL2230",
- "AL7230B", "THETA", "AL2210", "MAXIM_NEW", "GCT",
- "PV2000", "RALINK", "INTERSIL", "RFMD", "MAXIM_NEW2",
+ static const char *const zyd_rfs[] = {
+ "unknown", "unknown", "UW2451", "UCHIP", "AL2230",
+ "AL7230B", "THETA", "AL2210", "MAXIM_NEW", "GCT",
+ "PV2000", "RALINK", "INTERSIL", "RFMD", "MAXIM_NEW2",
"PHILIPS"
};
+
return (zyd_rfs[(type > 15) ? 0 : type]);
}
@@ -1245,8 +1240,8 @@
uint8_t channel)
{
static const struct {
- uint32_t r1, r2;
- } rfprog[] = ZYD_RFMD_CHANTABLE;
+ uint32_t r1, r2;
+ } rfprog[] = ZYD_RFMD_CHANTABLE;
zyd_cfg_rfwrite(sc, rfprog[channel - 1].r1);
zyd_cfg_rfwrite(sc, rfprog[channel - 1].r2);
@@ -1261,7 +1256,7 @@
{
uint8_t on251 = (sc->sc_mac_rev == ZYD_ZD1211) ? 0x3f : 0x7f;
- zyd_cfg_write16(sc, ZYD_CR11, on ? 0x00 : 0x04);
+ zyd_cfg_write16(sc, ZYD_CR11, on ? 0x00 : 0x04);
zyd_cfg_write16(sc, ZYD_CR251, on ? on251 : 0x2f);
return;
}
@@ -1275,7 +1270,7 @@
static const struct zyd_phy_pair phyini[] = ZYD_AL2230_PHY;
static const uint32_t rfini[] = ZYD_AL2230_RF;
uint32_t i;
-
+
/* init RF-dependent PHY registers */
for (i = 0; i != INDEXES(phyini); i++) {
zyd_cfg_write16(sc, phyini[i].reg, phyini[i].val);
@@ -1315,8 +1310,8 @@
uint8_t channel)
{
static const struct {
- uint32_t r1, r2, r3;
- } rfprog[] = ZYD_AL2230_CHANTABLE;
+ uint32_t r1, r2, r3;
+ } rfprog[] = ZYD_AL2230_CHANTABLE;
zyd_cfg_rfwrite(sc, rfprog[channel - 1].r1);
zyd_cfg_rfwrite(sc, rfprog[channel - 1].r2);
@@ -1333,7 +1328,7 @@
static void
zyd_cfg_rf_al7230b_switch_radio(struct zyd_softc *sc, uint8_t on)
{
- zyd_cfg_write16(sc, ZYD_CR11, on ? 0x00 : 0x04);
+ zyd_cfg_write16(sc, ZYD_CR11, on ? 0x00 : 0x04);
zyd_cfg_write16(sc, ZYD_CR251, on ? 0x3f : 0x2f);
return;
}
@@ -1378,8 +1373,8 @@
uint8_t channel)
{
static const struct {
- uint32_t r1, r2;
- } rfprog[] = ZYD_AL7230B_CHANTABLE;
+ uint32_t r1, r2;
+ } rfprog[] = ZYD_AL7230B_CHANTABLE;
static const uint32_t rfsc[] = ZYD_AL7230B_RF_SETCHANNEL;
uint32_t i;
@@ -1393,7 +1388,7 @@
zyd_cfg_write16(sc, ZYD_CR128, 0x14);
zyd_cfg_write16(sc, ZYD_CR129, 0x12);
zyd_cfg_write16(sc, ZYD_CR130, 0x10);
- zyd_cfg_write16(sc, ZYD_CR38, 0x38);
+ zyd_cfg_write16(sc, ZYD_CR38, 0x38);
zyd_cfg_write16(sc, ZYD_CR136, 0xdf);
zyd_cfg_rfwrite(sc, rfprog[channel - 1].r1);
@@ -1555,8 +1550,8 @@
static const struct zyd_phy_pair phyini[] = ZYD_MAXIM_PHY;
static const uint32_t rfini[] = ZYD_MAXIM_RF;
static const struct {
- uint32_t r1, r2;
- } rfprog[] = ZYD_MAXIM_CHANTABLE;
+ uint32_t r1, r2;
+ } rfprog[] = ZYD_MAXIM_CHANTABLE;
uint16_t tmp;
uint32_t i;
@@ -1578,10 +1573,10 @@
/* init maxim radio - skipping the two first values */
if (INDEXES(rfini) > 2) {
- for (i = 2; i != INDEXES(rfini); i++) {
- zyd_cfg_rfwrite(sc, rfini[i]);
+ for (i = 2; i != INDEXES(rfini); i++) {
+ zyd_cfg_rfwrite(sc, rfini[i]);
+ }
}
- }
zyd_cfg_read16(sc, ZYD_CR203, &tmp);
zyd_cfg_write16(sc, ZYD_CR203, tmp | (1 << 4));
@@ -1629,8 +1624,8 @@
static const struct zyd_phy_pair phyini[] = ZYD_MAXIM2_PHY;
static const uint32_t rfini[] = ZYD_MAXIM2_RF;
static const struct {
- uint32_t r1, r2;
- } rfprog[] = ZYD_MAXIM2_CHANTABLE;
+ uint32_t r1, r2;
+ } rfprog[] = ZYD_MAXIM2_CHANTABLE;
uint16_t tmp;
uint32_t i;
@@ -1652,9 +1647,9 @@
/* init maxim2 radio - skipping the two first values */
if (INDEXES(rfini) > 2) {
- for (i = 2; i != INDEXES(rfini); i++) {
- zyd_cfg_rfwrite(sc, rfini[i]);
- }
+ for (i = 2; i != INDEXES(rfini); i++) {
+ zyd_cfg_rfwrite(sc, rfini[i]);
+ }
}
zyd_cfg_read16(sc, ZYD_CR203, &tmp);
zyd_cfg_write16(sc, ZYD_CR203, tmp | (1 << 4));
@@ -1667,14 +1662,14 @@
static uint8_t
zyd_cfg_rf_init_hw(struct zyd_softc *sc, struct zyd_rf *rf)
{
- ; /* fix for indent */
+ ; /* fix for indent */
switch (sc->sc_rf_rev) {
case ZYD_RF_RFMD:
- rf->cfg_init_hw = zyd_cfg_rf_rfmd_init;
+ rf->cfg_init_hw = zyd_cfg_rf_rfmd_init;
rf->cfg_switch_radio = zyd_cfg_rf_rfmd_switch_radio;
- rf->cfg_set_channel = zyd_cfg_rf_rfmd_set_channel;
- rf->width = 24; /* 24-bit RF values */
+ rf->cfg_set_channel = zyd_cfg_rf_rfmd_set_channel;
+ rf->width = 24; /* 24-bit RF values */
break;
case ZYD_RF_AL2230:
if (sc->sc_mac_rev == ZYD_ZD1211B)
@@ -1682,38 +1677,38 @@
else
rf->cfg_init_hw = zyd_cfg_rf_al2230_init;
rf->cfg_switch_radio = zyd_cfg_rf_al2230_switch_radio;
- rf->cfg_set_channel = zyd_cfg_rf_al2230_set_channel;
- rf->width = 24; /* 24-bit RF values */
+ rf->cfg_set_channel = zyd_cfg_rf_al2230_set_channel;
+ rf->width = 24; /* 24-bit RF values */
break;
case ZYD_RF_AL7230B:
- rf->cfg_init_hw = zyd_cfg_rf_al7230b_init;
+ rf->cfg_init_hw = zyd_cfg_rf_al7230b_init;
rf->cfg_switch_radio = zyd_cfg_rf_al7230b_switch_radio;
- rf->cfg_set_channel = zyd_cfg_rf_al7230b_set_channel;
- rf->width = 24; /* 24-bit RF values */
+ rf->cfg_set_channel = zyd_cfg_rf_al7230b_set_channel;
+ rf->width = 24; /* 24-bit RF values */
break;
case ZYD_RF_AL2210:
- rf->cfg_init_hw = zyd_cfg_rf_al2210_init;
+ rf->cfg_init_hw = zyd_cfg_rf_al2210_init;
rf->cfg_switch_radio = zyd_cfg_rf_al2210_switch_radio;
- rf->cfg_set_channel = zyd_cfg_rf_al2210_set_channel;
- rf->width = 24; /* 24-bit RF values */
+ rf->cfg_set_channel = zyd_cfg_rf_al2210_set_channel;
+ rf->width = 24; /* 24-bit RF values */
break;
case ZYD_RF_GCT:
- rf->cfg_init_hw = zyd_cfg_rf_gct_init;
+ rf->cfg_init_hw = zyd_cfg_rf_gct_init;
rf->cfg_switch_radio = zyd_cfg_rf_gct_switch_radio;
- rf->cfg_set_channel = zyd_cfg_rf_gct_set_channel;
- rf->width = 21; /* 21-bit RF values */
+ rf->cfg_set_channel = zyd_cfg_rf_gct_set_channel;
+ rf->width = 21; /* 21-bit RF values */
break;
case ZYD_RF_MAXIM_NEW:
- rf->cfg_init_hw = zyd_cfg_rf_maxim_init;
+ rf->cfg_init_hw = zyd_cfg_rf_maxim_init;
rf->cfg_switch_radio = zyd_cfg_rf_maxim_switch_radio;
- rf->cfg_set_channel = zyd_cfg_rf_maxim_set_channel;
- rf->width = 18; /* 18-bit RF values */
+ rf->cfg_set_channel = zyd_cfg_rf_maxim_set_channel;
+ rf->width = 18; /* 18-bit RF values */
break;
case ZYD_RF_MAXIM_NEW2:
- rf->cfg_init_hw = zyd_cfg_rf_maxim2_init;
+ rf->cfg_init_hw = zyd_cfg_rf_maxim2_init;
rf->cfg_switch_radio = zyd_cfg_rf_maxim2_switch_radio;
- rf->cfg_set_channel = zyd_cfg_rf_maxim2_set_channel;
- rf->width = 18; /* 18-bit RF values */
+ rf->cfg_set_channel = zyd_cfg_rf_maxim2_set_channel;
+ rf->width = 18; /* 18-bit RF values */
break;
default:
printf("%s: Sorry, radio %s is not supported yet\n",
@@ -1802,7 +1797,7 @@
/* init beacon interval to 100ms */
zyd_cfg_set_beacon_interval(sc, 100);
- return (0); /* success */
+ return (0); /* success */
}
/*
@@ -1818,18 +1813,18 @@
/* read MAC address */
zyd_cfg_read32(sc, ZYD_EEPROM_MAC_ADDR_P1, &tmp);
sc->sc_ic.ic_myaddr[0] = tmp & 0xff;
- sc->sc_ic.ic_myaddr[1] = tmp >> 8;
+ sc->sc_ic.ic_myaddr[1] = tmp >> 8;
sc->sc_ic.ic_myaddr[2] = tmp >> 16;
sc->sc_ic.ic_myaddr[3] = tmp >> 24;
zyd_cfg_read32(sc, ZYD_EEPROM_MAC_ADDR_P2, &tmp);
sc->sc_ic.ic_myaddr[4] = tmp & 0xff;
- sc->sc_ic.ic_myaddr[5] = tmp >> 8;
+ sc->sc_ic.ic_myaddr[5] = tmp >> 8;
zyd_cfg_read32(sc, ZYD_EEPROM_POD, &tmp);
- sc->sc_rf_rev = tmp & 0x0f;
- sc->sc_fix_cr47 = (tmp >> 8 ) & 0x01;
+ sc->sc_rf_rev = tmp & 0x0f;
+ sc->sc_fix_cr47 = (tmp >> 8) & 0x01;
sc->sc_fix_cr157 = (tmp >> 13) & 0x01;
- sc->sc_pa_rev = (tmp >> 16) & 0x0f;
+ sc->sc_pa_rev = (tmp >> 16) & 0x0f;
/* read regulatory domain (currently unused) */
zyd_cfg_read32(sc, ZYD_EEPROM_SUBID, &tmp);
@@ -1930,14 +1925,12 @@
"upload firmware!\n", sc->sc_name);
return;
}
-
/* reset device */
- err = usbreq_set_config(sc->sc_udev, &(sc->sc_mtx),
- sc->sc_udev->curr_config_no);
+ err = usbreq_set_config(sc->sc_udev, &(sc->sc_mtx),
+ sc->sc_udev->curr_config_no);
if (err) {
DPRINTF(sc, 0, "reset failed (ignored)\n");
}
-
/* Read MAC and other stuff rom EEPROM */
zyd_cfg_read_eeprom(sc);
@@ -1946,15 +1939,13 @@
printf("%s: HW init failed!\n", sc->sc_name);
return;
}
-
/* Now init the RF chip */
if (zyd_cfg_rf_init_hw(sc, &sc->sc_rf)) {
printf("%s: RF init failed!\n", sc->sc_name);
return;
}
-
printf("%s: HMAC ZD1211%s, FW %02x.%02x, RF %s, PA %x, address %02x:%02x:%02x:%02x:%02x:%02x\n",
- sc->sc_name, (sc->sc_mac_rev == ZYD_ZD1211) ? "": "B",
+ sc->sc_name, (sc->sc_mac_rev == ZYD_ZD1211) ? "" : "B",
sc->sc_fw_rev >> 8, sc->sc_fw_rev & 0xff, zyd_rf_name(sc->sc_rf_rev),
sc->sc_pa_rev, sc->sc_ic.ic_myaddr[0],
sc->sc_ic.ic_myaddr[1], sc->sc_ic.ic_myaddr[2],
@@ -1993,13 +1984,13 @@
ic->ic_state = IEEE80211_S_INIT;
/* Set device capabilities */
- ic->ic_caps =
- IEEE80211_C_MONITOR /* monitor mode */
- | IEEE80211_C_SHPREAMBLE /* short preamble supported */
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list