Overall, looks pretty clean, good job!
Comments:
1) [major issue] Don't take and release a heavy lock on every single RX
packet.
2) remove net_device_stats from private structure, and use net_device::stats
3) rx_ring_size should not be a module param, since that should be
supported via ethtool
4) cpmac_tx_timeout() doesn't really do anything to alleviate the condition
5) don't set dev->mem_start and dev->mem_end, those are fields that are
going away, and that's not their intended purpose. just store a pointer
to the resource info.