• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src/router/wpa_supplicant/src/drivers/

Lines Matching refs:drv

113 	struct wpa_driver_roboswitch_data *drv, u8 phy, u8 reg, u16 val, int op)
115 if (drv->et) {
120 drv->ifr.ifr_data = (caddr_t) args;
123 if (ioctl(drv->fd, et_ioctl[1][op], &drv->ifr) < 0)
126 if (ioctl(drv->fd, et_ioctl[0][op], &drv->ifr) < 0)
132 struct mii_ioctl_data *mii = if_mii(&drv->ifr);
137 if (ioctl(drv->fd, mii_ioctl[op], &drv->ifr) < 0)
146 struct wpa_driver_roboswitch_data *drv, u8 reg)
148 return wpa_driver_roboswitch_mdio_access(drv, ROBO_PHY_ADDR, reg, 0, 0);
153 struct wpa_driver_roboswitch_data *drv, u8 reg, u16 val)
155 wpa_driver_roboswitch_mdio_access(drv, ROBO_PHY_ADDR, reg, val, 1);
159 static int wpa_driver_roboswitch_reg(struct wpa_driver_roboswitch_data *drv,
165 wpa_driver_roboswitch_mdio_write(drv, ROBO_MII_PAGE,
168 wpa_driver_roboswitch_mdio_write(drv, ROBO_MII_ADDR, (reg << 8) | op);
172 if ((wpa_driver_roboswitch_mdio_read(drv,
182 static int wpa_driver_roboswitch_read(struct wpa_driver_roboswitch_data *drv,
188 wpa_driver_roboswitch_reg(drv, page, reg, ROBO_MII_ADDR_READ) < 0)
192 val[i] = wpa_driver_roboswitch_mdio_read(drv,
200 static int wpa_driver_roboswitch_write(struct wpa_driver_roboswitch_data *drv,
207 wpa_driver_roboswitch_mdio_write(drv, ROBO_MII_DATA_OFFSET + i,
210 return wpa_driver_roboswitch_reg(drv, page, reg, ROBO_MII_ADDR_WRITE);
217 struct wpa_driver_roboswitch_data *drv = priv;
220 (os_memcmp(buf, drv->own_addr, ETH_ALEN) == 0 ||
222 wpa_supplicant_rx_eapol(drv->ctx, src_addr, buf + 14,
231 struct wpa_driver_roboswitch_data *drv = priv;
239 if (drv->l2 == NULL)
249 os_memcpy(msg->eth.h_source, drv->own_addr, ETH_ALEN);
253 res = l2_packet_send(drv->l2, dest, proto, (u8 *) msg, msg_len);
277 struct wpa_driver_roboswitch_data *drv = priv;
278 return drv->own_addr;
282 static int wpa_driver_roboswitch_join(struct wpa_driver_roboswitch_data *drv,
289 if (wpa_driver_roboswitch_read(drv, ROBO_ARLCTRL_PAGE,
295 wpa_driver_roboswitch_write(drv, ROBO_ARLCTRL_PAGE,
297 wpa_driver_roboswitch_write(drv, ROBO_ARLCTRL_PAGE,
299 wpa_driver_roboswitch_write(drv, ROBO_ARLCTRL_PAGE,
301 wpa_driver_roboswitch_write(drv, ROBO_ARLCTRL_PAGE,
303 wpa_driver_roboswitch_write(drv, ROBO_ARLCTRL_PAGE,
307 wpa_driver_roboswitch_read(drv, ROBO_ARLCTRL_PAGE,
309 wpa_driver_roboswitch_read(drv, ROBO_ARLCTRL_PAGE,
313 wpa_driver_roboswitch_read(drv, ROBO_ARLCTRL_PAGE,
315 wpa_driver_roboswitch_read(drv, ROBO_ARLCTRL_PAGE,
319 wpa_driver_roboswitch_write(drv, ROBO_ARLCTRL_PAGE,
321 wpa_driver_roboswitch_write(drv, ROBO_ARLCTRL_PAGE,
328 static int wpa_driver_roboswitch_leave(struct wpa_driver_roboswitch_data *drv,
335 wpa_driver_roboswitch_read(drv, ROBO_ARLCTRL_PAGE, ROBO_ARLCTRL_CONF,
340 wpa_driver_roboswitch_read(drv, ROBO_ARLCTRL_PAGE,
342 wpa_driver_roboswitch_read(drv, ROBO_ARLCTRL_PAGE, ROBO_ARLCTRL_VEC_1,
346 wpa_driver_roboswitch_read(drv, ROBO_ARLCTRL_PAGE,
348 wpa_driver_roboswitch_read(drv, ROBO_ARLCTRL_PAGE,
354 wpa_driver_roboswitch_write(drv, ROBO_ARLCTRL_PAGE,
358 wpa_driver_roboswitch_read(drv, ROBO_ARLCTRL_PAGE,
361 wpa_driver_roboswitch_read(drv, ROBO_ARLCTRL_PAGE,
364 wpa_driver_roboswitch_write(drv, ROBO_ARLCTRL_PAGE,
367 wpa_driver_roboswitch_write(drv, ROBO_ARLCTRL_PAGE,
372 wpa_driver_roboswitch_read(drv, ROBO_ARLCTRL_PAGE,
374 wpa_driver_roboswitch_read(drv, ROBO_ARLCTRL_PAGE,
379 wpa_driver_roboswitch_write(drv, ROBO_ARLCTRL_PAGE,
382 wpa_driver_roboswitch_write(drv, ROBO_ARLCTRL_PAGE,
393 struct wpa_driver_roboswitch_data *drv;
402 drv = os_zalloc(sizeof(*drv));
403 if (drv == NULL) return NULL;
404 drv->ctx = ctx;
406 drv->fd = socket(PF_INET, SOCK_DGRAM, 0);
407 if (drv->fd < 0) {
409 os_free(drv);
416 if (ioctl(drv->fd, SIOCGIFVLAN, &ifv) >= 0) {
417 os_strlcpy(drv->ifname, ifv.u.device2, sizeof(drv->ifname));
419 if (ioctl(drv->fd, SIOCGIFVLAN, &ifv) < 0) {
426 os_strlcpy(drv->ifname, "eth0", sizeof(drv->ifname));
428 if (sscanf(ifname, "%16[^.].%hu", drv->ifname, &vlan) != 2) {
429 os_strlcpy(drv->ifname, ifname, sizeof(drv->ifname));
433 os_memset(&drv->ifr, 0, sizeof(drv->ifr));
434 os_strlcpy(drv->ifr.ifr_name, drv->ifname, IFNAMSIZ);
435 if (ioctl(drv->fd, SIOCGMIIPHY, &drv->ifr) < 0) {
436 drv->et = 1;
438 if (if_mii(&drv->ifr)->phy_id != ROBO_PHY_ADDR) {
444 phyid = wpa_driver_roboswitch_mdio_read(drv, 0x03) << 16 |
445 wpa_driver_roboswitch_mdio_read(drv, 0x02);
447 phyid = wpa_driver_roboswitch_mdio_access(drv, 0, 0x03, 0, 0) << 16 |
448 wpa_driver_roboswitch_mdio_access(drv, 0, 0x02, 0, 0);
457 wpa_driver_roboswitch_write(drv, ROBO_VLAN_PAGE, ROBO_VLAN_ACCESS_5350,
459 wpa_driver_roboswitch_read(drv, ROBO_VLAN_PAGE, ROBO_VLAN_ACCESS_5350,
462 drv->model = BCM535x;
466 drv->model |= BCM5356;
468 drv->model = BCM536x;
471 __func__, phyid, drv->model);
474 vlan > ((drv->model == BCM536x) ? ROBO_VLAN_MAX
477 "%s", __func__, vlan, drv->ifname);
482 for ( ; i <= ((drv->model == BCM536x) ? ROBO_VLAN_MAX
487 wpa_driver_roboswitch_write(drv, ROBO_VLAN_PAGE,
488 (drv->model == BCM536x) ? ROBO_VLAN_ACCESS
491 wpa_driver_roboswitch_read(drv, ROBO_VLAN_PAGE, ROBO_VLAN_READ,
492 &u.val16[0], (drv->model == BCM536x) ? 1 : 2);
494 if (drv->model == BCM536x &&
503 if (drv->model & BCM535x &&
504 u.val32 & (1 << ((drv->model & BCM5356) ? 24 : 20))) {
509 vlan |= (drv->model & BCM5356) ?
525 "interface %s", __func__, drv->ifname);
529 "%s", __func__, vlan, drv->ifname);
532 drv->ports = u.val16[0] & 0x001f;
534 drv->ports |= 1 << 8;
536 drv->l2 = l2_packet_init(drv->ifname, NULL, ETH_P_EAPOL,
537 wpa_driver_roboswitch_receive, drv,
539 if (drv->l2 == NULL) {
541 __func__, drv->ifname);
544 l2_packet_get_own_addr(drv->l2, drv->own_addr);
546 if (os_strcmp(drv->ifname, ifname) != 0) {
548 drv->l2_vlan = l2_packet_init(ifname, NULL, ETH_P_EAPOL,
550 drv, 1);
551 if (drv->l2_vlan)
552 l2_packet_get_own_addr(drv->l2_vlan, drv->own_addr);
555 if (wpa_driver_roboswitch_join(drv, drv->ports, pae_group_addr) < 0) {
563 return drv;
566 close(drv->fd);
567 os_free(drv);
574 struct wpa_driver_roboswitch_data *drv = priv;
576 if (drv->l2) {
577 l2_packet_deinit(drv->l2);
578 drv->l2 = NULL;
580 if (drv->l2_vlan) {
581 l2_packet_deinit(drv->l2_vlan);
582 drv->l2_vlan = NULL;
584 if (wpa_driver_roboswitch_leave(drv, drv->ports, pae_group_addr) < 0) {
589 close(drv->fd);
590 os_free(drv);