devices/generic.c
changeset 1542 91ae9c95dd2e
parent 1541 26ac1c611100
child 1555 7679e98b0bb1
equal deleted inserted replaced
1541:26ac1c611100 1542:91ae9c95dd2e
    73 } ec_gen_device_t;
    73 } ec_gen_device_t;
    74 
    74 
    75 int ec_gen_device_open(ec_gen_device_t *);
    75 int ec_gen_device_open(ec_gen_device_t *);
    76 int ec_gen_device_stop(ec_gen_device_t *);
    76 int ec_gen_device_stop(ec_gen_device_t *);
    77 int ec_gen_device_start_xmit(ec_gen_device_t *, struct sk_buff *);
    77 int ec_gen_device_start_xmit(ec_gen_device_t *, struct sk_buff *);
       
    78 void ec_gen_device_poll(ec_gen_device_t *);
    78 
    79 
    79 /*****************************************************************************/
    80 /*****************************************************************************/
    80 
    81 
    81 static int ec_gen_netdev_open(struct net_device *dev)
    82 static int ec_gen_netdev_open(struct net_device *dev)
    82 {
    83 {
   105 
   106 
   106 /*****************************************************************************/
   107 /*****************************************************************************/
   107 
   108 
   108 void ec_gen_poll(struct net_device *dev)
   109 void ec_gen_poll(struct net_device *dev)
   109 {
   110 {
       
   111     ec_gen_device_t *gendev = *((ec_gen_device_t **) netdev_priv(dev));
       
   112     ec_gen_device_poll(gendev);
   110 }
   113 }
   111 
   114 
   112 /*****************************************************************************/
   115 /*****************************************************************************/
   113 
   116 
   114 static const struct net_device_ops ec_gen_netdev_ops = {
   117 static const struct net_device_ops ec_gen_netdev_ops = {
   269     return ret == len ? NETDEV_TX_OK : NETDEV_TX_BUSY;
   272     return ret == len ? NETDEV_TX_OK : NETDEV_TX_BUSY;
   270 }
   273 }
   271 
   274 
   272 /*****************************************************************************/
   275 /*****************************************************************************/
   273 
   276 
       
   277 /** Polls the device.
       
   278  */
       
   279 void ec_gen_device_poll(
       
   280         ec_gen_device_t *dev
       
   281         )
       
   282 {
       
   283     struct msghdr msg;
       
   284     struct kvec iov;
       
   285     char buf[2000]; // FIXME
       
   286     int ret, budget = 10; // FIXME
       
   287 
       
   288     iov.iov_base = buf;
       
   289     iov.iov_len = 2000;
       
   290     memset(&msg, 0, sizeof(msg));
       
   291 
       
   292     do {
       
   293         ret = kernel_recvmsg(dev->socket, &msg, &iov, 1, iov.iov_len,
       
   294                 MSG_DONTWAIT);
       
   295         if (ret > 0) {
       
   296             ecdev_receive(dev->ecdev, buf, ret);
       
   297         } else if (ret < 0) {
       
   298             break;
       
   299         }
       
   300         budget--;
       
   301     } while (budget);
       
   302 }
       
   303 
       
   304 /*****************************************************************************/
       
   305 
   274 /** Offer device.
   306 /** Offer device.
   275  */
   307  */
   276 int offer_device(
   308 int offer_device(
   277         struct net_device *netdev
   309         struct net_device *netdev
   278         )
   310         )