static void cpc_tx_timeout(struct net_device *dev)
 {
-       pc300dev_t *d = (pc300dev_t *) dev->priv;
+       pc300dev_t *d = (pc300dev_t *) dev_to_hdlc(dev)->priv;
        pc300ch_t *chan = (pc300ch_t *) d->chan;
        pc300_t *card = (pc300_t *) chan->card;
        int ch = chan->channel;
 
 static int cpc_queue_xmit(struct sk_buff *skb, struct net_device *dev)
 {
-       pc300dev_t *d = (pc300dev_t *) dev->priv;
+       pc300dev_t *d = (pc300dev_t *) dev_to_hdlc(dev)->priv;
        pc300ch_t *chan = (pc300ch_t *) d->chan;
        pc300_t *card = (pc300_t *) chan->card;
        int ch = chan->channel;
 
 static void cpc_net_rx(struct net_device *dev)
 {
-       pc300dev_t *d = (pc300dev_t *) dev->priv;
+       pc300dev_t *d = (pc300dev_t *) dev_to_hdlc(dev)->priv;
        pc300ch_t *chan = (pc300ch_t *) d->chan;
        pc300_t *card = (pc300_t *) chan->card;
        int ch = chan->channel;
 
 static int cpc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
 {
-       pc300dev_t *d = (pc300dev_t *) dev->priv;
+       pc300dev_t *d = (pc300dev_t *) dev_to_hdlc(dev)->priv;
        pc300ch_t *chan = (pc300ch_t *) d->chan;
        pc300_t *card = (pc300_t *) chan->card;
        pc300conf_t conf_aux;
 static int cpc_attach(struct net_device *dev, unsigned short encoding,
                      unsigned short parity)
 {
-       pc300dev_t *d = (pc300dev_t *)dev->priv;
+       pc300dev_t *d = (pc300dev_t *)dev_to_hdlc(dev)->priv;
        pc300ch_t *chan = (pc300ch_t *)d->chan;
        pc300_t *card = (pc300_t *)chan->card;
        pc300chconf_t *conf = (pc300chconf_t *)&chan->conf;
 
 int cpc_open(struct net_device *dev)
 {
-       pc300dev_t *d = (pc300dev_t *) dev->priv;
+       pc300dev_t *d = (pc300dev_t *) dev_to_hdlc(dev)->priv;
        struct ifreq ifr;
        int result;
 
 
 static int cpc_close(struct net_device *dev)
 {
-       pc300dev_t *d = (pc300dev_t *) dev->priv;
+       pc300dev_t *d = (pc300dev_t *) dev_to_hdlc(dev)->priv;
        pc300ch_t *chan = (pc300ch_t *) d->chan;
        pc300_t *card = (pc300_t *) chan->card;
        unsigned long flags;
                d->line_on = 0;
                d->line_off = 0;
 
-               dev = alloc_hdlcdev(NULL);
+               dev = alloc_hdlcdev(d);
                if (dev == NULL)
                        continue;
 
                dev->do_ioctl = cpc_ioctl;
 
                if (register_hdlc_device(dev) == 0) {
-                       dev->priv = d;  /* We need 'priv', hdlc doesn't */
                        printk("%s: Cyclades-PC300/", dev->name);
                        switch (card->hw.type) {
                                case PC300_TE: