static int orinoco_ioctl_setwap(struct net_device *dev,
                                struct iw_request_info *info,
-                               struct sockaddr *ap_addr,
+                               union iwreq_data *wrqu,
                                char *extra)
 {
+       struct sockaddr *ap_addr = &wrqu->ap_addr;
        struct orinoco_private *priv = ndev_priv(dev);
        int err = -EINPROGRESS;         /* Call commit handler */
        unsigned long flags;
 
 static int orinoco_ioctl_getwap(struct net_device *dev,
                                struct iw_request_info *info,
-                               struct sockaddr *ap_addr,
+                               union iwreq_data *wrqu,
                                char *extra)
 {
+       struct sockaddr *ap_addr = &wrqu->ap_addr;
        struct orinoco_private *priv = ndev_priv(dev);
 
        int err = 0;
 
 static int orinoco_ioctl_setiwencode(struct net_device *dev,
                                     struct iw_request_info *info,
-                                    struct iw_point *erq,
+                                    union iwreq_data *wrqu,
                                     char *keybuf)
 {
+       struct iw_point *erq = &wrqu->encoding;
        struct orinoco_private *priv = ndev_priv(dev);
        int index = (erq->flags & IW_ENCODE_INDEX) - 1;
        int setindex = priv->tx_key;
 
 static int orinoco_ioctl_getiwencode(struct net_device *dev,
                                     struct iw_request_info *info,
-                                    struct iw_point *erq,
+                                    union iwreq_data *wrqu,
                                     char *keybuf)
 {
+       struct iw_point *erq = &wrqu->encoding;
        struct orinoco_private *priv = ndev_priv(dev);
        int index = (erq->flags & IW_ENCODE_INDEX) - 1;
        unsigned long flags;
 
 static int orinoco_ioctl_setessid(struct net_device *dev,
                                  struct iw_request_info *info,
-                                 struct iw_point *erq,
+                                 union iwreq_data *wrqu,
                                  char *essidbuf)
 {
+       struct iw_point *erq = &wrqu->essid;
        struct orinoco_private *priv = ndev_priv(dev);
        unsigned long flags;
 
 
 static int orinoco_ioctl_getessid(struct net_device *dev,
                                  struct iw_request_info *info,
-                                 struct iw_point *erq,
+                                 union iwreq_data *wrqu,
                                  char *essidbuf)
 {
+       struct iw_point *erq = &wrqu->essid;
        struct orinoco_private *priv = ndev_priv(dev);
        int active;
        int err = 0;
 
 static int orinoco_ioctl_setfreq(struct net_device *dev,
                                 struct iw_request_info *info,
-                                struct iw_freq *frq,
+                                union iwreq_data *wrqu,
                                 char *extra)
 {
+       struct iw_freq *frq = &wrqu->freq;
        struct orinoco_private *priv = ndev_priv(dev);
        int chan = -1;
        unsigned long flags;
 
 static int orinoco_ioctl_getfreq(struct net_device *dev,
                                 struct iw_request_info *info,
-                                struct iw_freq *frq,
+                                union iwreq_data *wrqu,
                                 char *extra)
 {
+       struct iw_freq *frq = &wrqu->freq;
        struct orinoco_private *priv = ndev_priv(dev);
        int tmp;
 
 
 static int orinoco_ioctl_getsens(struct net_device *dev,
                                 struct iw_request_info *info,
-                                struct iw_param *srq,
+                                union iwreq_data *wrqu,
                                 char *extra)
 {
+       struct iw_param *srq = &wrqu->sens;
        struct orinoco_private *priv = ndev_priv(dev);
        struct hermes *hw = &priv->hw;
        u16 val;
 
 static int orinoco_ioctl_setsens(struct net_device *dev,
                                 struct iw_request_info *info,
-                                struct iw_param *srq,
+                                union iwreq_data *wrqu,
                                 char *extra)
 {
+       struct iw_param *srq = &wrqu->sens;
        struct orinoco_private *priv = ndev_priv(dev);
        int val = srq->value;
        unsigned long flags;
 
 static int orinoco_ioctl_setrate(struct net_device *dev,
                                 struct iw_request_info *info,
-                                struct iw_param *rrq,
+                                union iwreq_data *wrqu,
                                 char *extra)
 {
+       struct iw_param *rrq = &wrqu->bitrate;
        struct orinoco_private *priv = ndev_priv(dev);
        int ratemode;
        int bitrate; /* 100s of kilobits */
 
 static int orinoco_ioctl_getrate(struct net_device *dev,
                                 struct iw_request_info *info,
-                                struct iw_param *rrq,
+                                union iwreq_data *wrqu,
                                 char *extra)
 {
+       struct iw_param *rrq = &wrqu->bitrate;
        struct orinoco_private *priv = ndev_priv(dev);
        int err = 0;
        int bitrate, automatic;
 
 static int orinoco_ioctl_setpower(struct net_device *dev,
                                  struct iw_request_info *info,
-                                 struct iw_param *prq,
+                                 union iwreq_data *wrqu,
                                  char *extra)
 {
+       struct iw_param *prq = &wrqu->power;
        struct orinoco_private *priv = ndev_priv(dev);
        int err = -EINPROGRESS;         /* Call commit handler */
        unsigned long flags;
 
 static int orinoco_ioctl_getpower(struct net_device *dev,
                                  struct iw_request_info *info,
-                                 struct iw_param *prq,
+                                 union iwreq_data *wrqu,
                                  char *extra)
 {
+       struct iw_param *prq = &wrqu->power;
        struct orinoco_private *priv = ndev_priv(dev);
        struct hermes *hw = &priv->hw;
        int err = 0;
 
 static int orinoco_ioctl_reset(struct net_device *dev,
                               struct iw_request_info *info,
-                              void *wrqu,
+                              union iwreq_data *wrqu,
                               char *extra)
 {
        struct orinoco_private *priv = ndev_priv(dev);
 
 static int orinoco_ioctl_setibssport(struct net_device *dev,
                                     struct iw_request_info *info,
-                                    void *wrqu,
+                                    union iwreq_data *wrqu,
                                     char *extra)
 
 {
 
 static int orinoco_ioctl_getibssport(struct net_device *dev,
                                     struct iw_request_info *info,
-                                    void *wrqu,
+                                    union iwreq_data *wrqu,
                                     char *extra)
 {
        struct orinoco_private *priv = ndev_priv(dev);
 
 static int orinoco_ioctl_setport3(struct net_device *dev,
                                  struct iw_request_info *info,
-                                 void *wrqu,
+                                 union iwreq_data *wrqu,
                                  char *extra)
 {
        struct orinoco_private *priv = ndev_priv(dev);
 
 static int orinoco_ioctl_getport3(struct net_device *dev,
                                  struct iw_request_info *info,
-                                 void *wrqu,
+                                 union iwreq_data *wrqu,
                                  char *extra)
 {
        struct orinoco_private *priv = ndev_priv(dev);
 
 static int orinoco_ioctl_setpreamble(struct net_device *dev,
                                     struct iw_request_info *info,
-                                    void *wrqu,
+                                    union iwreq_data *wrqu,
                                     char *extra)
 {
        struct orinoco_private *priv = ndev_priv(dev);
 
 static int orinoco_ioctl_getpreamble(struct net_device *dev,
                                     struct iw_request_info *info,
-                                    void *wrqu,
+                                    union iwreq_data *wrqu,
                                     char *extra)
 {
        struct orinoco_private *priv = ndev_priv(dev);
  * For Wireless Tools 25 and 26 append "dummy" are the end. */
 static int orinoco_ioctl_getrid(struct net_device *dev,
                                struct iw_request_info *info,
-                               struct iw_point *data,
+                               union iwreq_data *wrqu,
                                char *extra)
 {
+       struct iw_point *data = &wrqu->data;
        struct orinoco_private *priv = ndev_priv(dev);
        struct hermes *hw = &priv->hw;
        int rid = data->flags;
 /* Commit handler, called after set operations */
 static int orinoco_ioctl_commit(struct net_device *dev,
                                struct iw_request_info *info,
-                               void *wrqu,
+                               union iwreq_data *wrqu,
                                char *extra)
 {
        struct orinoco_private *priv = ndev_priv(dev);
  */
 
 static const iw_handler        orinoco_handler[] = {
-       IW_HANDLER(SIOCSIWCOMMIT,       (iw_handler)orinoco_ioctl_commit),
+       IW_HANDLER(SIOCSIWCOMMIT,       orinoco_ioctl_commit),
        IW_HANDLER(SIOCGIWNAME,         (iw_handler)cfg80211_wext_giwname),
-       IW_HANDLER(SIOCSIWFREQ,         (iw_handler)orinoco_ioctl_setfreq),
-       IW_HANDLER(SIOCGIWFREQ,         (iw_handler)orinoco_ioctl_getfreq),
+       IW_HANDLER(SIOCSIWFREQ,         orinoco_ioctl_setfreq),
+       IW_HANDLER(SIOCGIWFREQ,         orinoco_ioctl_getfreq),
        IW_HANDLER(SIOCSIWMODE,         (iw_handler)cfg80211_wext_siwmode),
        IW_HANDLER(SIOCGIWMODE,         (iw_handler)cfg80211_wext_giwmode),
-       IW_HANDLER(SIOCSIWSENS,         (iw_handler)orinoco_ioctl_setsens),
-       IW_HANDLER(SIOCGIWSENS,         (iw_handler)orinoco_ioctl_getsens),
+       IW_HANDLER(SIOCSIWSENS,         orinoco_ioctl_setsens),
+       IW_HANDLER(SIOCGIWSENS,         orinoco_ioctl_getsens),
        IW_HANDLER(SIOCGIWRANGE,        (iw_handler)cfg80211_wext_giwrange),
        IW_HANDLER(SIOCSIWSPY,          iw_handler_set_spy),
        IW_HANDLER(SIOCGIWSPY,          iw_handler_get_spy),
        IW_HANDLER(SIOCSIWTHRSPY,       iw_handler_set_thrspy),
        IW_HANDLER(SIOCGIWTHRSPY,       iw_handler_get_thrspy),
-       IW_HANDLER(SIOCSIWAP,           (iw_handler)orinoco_ioctl_setwap),
-       IW_HANDLER(SIOCGIWAP,           (iw_handler)orinoco_ioctl_getwap),
+       IW_HANDLER(SIOCSIWAP,           orinoco_ioctl_setwap),
+       IW_HANDLER(SIOCGIWAP,           orinoco_ioctl_getwap),
        IW_HANDLER(SIOCSIWSCAN,         (iw_handler)cfg80211_wext_siwscan),
        IW_HANDLER(SIOCGIWSCAN,         (iw_handler)cfg80211_wext_giwscan),
-       IW_HANDLER(SIOCSIWESSID,        (iw_handler)orinoco_ioctl_setessid),
-       IW_HANDLER(SIOCGIWESSID,        (iw_handler)orinoco_ioctl_getessid),
-       IW_HANDLER(SIOCSIWRATE,         (iw_handler)orinoco_ioctl_setrate),
-       IW_HANDLER(SIOCGIWRATE,         (iw_handler)orinoco_ioctl_getrate),
+       IW_HANDLER(SIOCSIWESSID,        orinoco_ioctl_setessid),
+       IW_HANDLER(SIOCGIWESSID,        orinoco_ioctl_getessid),
+       IW_HANDLER(SIOCSIWRATE,         orinoco_ioctl_setrate),
+       IW_HANDLER(SIOCGIWRATE,         orinoco_ioctl_getrate),
        IW_HANDLER(SIOCSIWRTS,          (iw_handler)cfg80211_wext_siwrts),
        IW_HANDLER(SIOCGIWRTS,          (iw_handler)cfg80211_wext_giwrts),
        IW_HANDLER(SIOCSIWFRAG,         (iw_handler)cfg80211_wext_siwfrag),
        IW_HANDLER(SIOCGIWFRAG,         (iw_handler)cfg80211_wext_giwfrag),
        IW_HANDLER(SIOCGIWRETRY,        (iw_handler)cfg80211_wext_giwretry),
-       IW_HANDLER(SIOCSIWENCODE,       (iw_handler)orinoco_ioctl_setiwencode),
-       IW_HANDLER(SIOCGIWENCODE,       (iw_handler)orinoco_ioctl_getiwencode),
-       IW_HANDLER(SIOCSIWPOWER,        (iw_handler)orinoco_ioctl_setpower),
-       IW_HANDLER(SIOCGIWPOWER,        (iw_handler)orinoco_ioctl_getpower),
+       IW_HANDLER(SIOCSIWENCODE,       orinoco_ioctl_setiwencode),
+       IW_HANDLER(SIOCGIWENCODE,       orinoco_ioctl_getiwencode),
+       IW_HANDLER(SIOCSIWPOWER,        orinoco_ioctl_setpower),
+       IW_HANDLER(SIOCGIWPOWER,        orinoco_ioctl_getpower),
        IW_HANDLER(SIOCSIWGENIE,        orinoco_ioctl_set_genie),
        IW_HANDLER(SIOCGIWGENIE,        orinoco_ioctl_get_genie),
        IW_HANDLER(SIOCSIWMLME,         orinoco_ioctl_set_mlme),
   Added typecasting since we no longer use iwreq_data -- Moustafa
  */
 static const iw_handler        orinoco_private_handler[] = {
-       [0] = (iw_handler)orinoco_ioctl_reset,
-       [1] = (iw_handler)orinoco_ioctl_reset,
-       [2] = (iw_handler)orinoco_ioctl_setport3,
-       [3] = (iw_handler)orinoco_ioctl_getport3,
-       [4] = (iw_handler)orinoco_ioctl_setpreamble,
-       [5] = (iw_handler)orinoco_ioctl_getpreamble,
-       [6] = (iw_handler)orinoco_ioctl_setibssport,
-       [7] = (iw_handler)orinoco_ioctl_getibssport,
-       [9] = (iw_handler)orinoco_ioctl_getrid,
+       [0] = orinoco_ioctl_reset,
+       [1] = orinoco_ioctl_reset,
+       [2] = orinoco_ioctl_setport3,
+       [3] = orinoco_ioctl_getport3,
+       [4] = orinoco_ioctl_setpreamble,
+       [5] = orinoco_ioctl_getpreamble,
+       [6] = orinoco_ioctl_setibssport,
+       [7] = orinoco_ioctl_getibssport,
+       [9] = orinoco_ioctl_getrid,
 };
 
 const struct iw_handler_def orinoco_handler_def = {