| #ifndef __RTL_COMPAT_H__ |
| #define __RTL_COMPAT_H__ |
| |
| #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)) |
| /* |
| * Use this if you want to use the same suspend and resume callbacks for suspend |
| * to RAM and hibernation. |
| */ |
| #define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \ |
| struct dev_pm_ops name = { \ |
| .suspend = suspend_fn, \ |
| .resume = resume_fn, \ |
| .freeze = suspend_fn, \ |
| .thaw = resume_fn, \ |
| .poweroff = suspend_fn, \ |
| .restore = resume_fn, \ |
| } |
| |
| #define compat_pci_suspend(fn) \ |
| int fn##_compat(struct pci_dev *pdev, pm_message_t state) \ |
| { \ |
| int r; \ |
| \ |
| r = fn(&pdev->dev); \ |
| if (r) \ |
| return r; \ |
| \ |
| pci_save_state(pdev); \ |
| pci_disable_device(pdev); \ |
| pci_set_power_state(pdev, PCI_D3hot); \ |
| \ |
| return 0; \ |
| } |
| |
| #define compat_pci_resume(fn) \ |
| int fn##_compat(struct pci_dev *pdev) \ |
| { \ |
| int r; \ |
| \ |
| pci_set_power_state(pdev, PCI_D0); \ |
| r = pci_enable_device(pdev); \ |
| if (r) \ |
| return r; \ |
| pci_restore_state(pdev); \ |
| \ |
| return fn(&pdev->dev); \ |
| } |
| #endif |
| |
| #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,39)) |
| #define RX_FLAG_MACTIME_MPDU RX_FLAG_TSFT |
| #else |
| #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)) |
| #define RX_FLAG_MACTIME_MPDU RX_FLAG_MACTIME_START |
| #else |
| #endif |
| //#define NETDEV_TX_OK |
| #endif |
| |
| #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0)) |
| #define IEEE80211_KEY_FLAG_SW_MGMT IEEE80211_KEY_FLAG_SW_MGMT_TX |
| #endif |
| |
| struct ieee80211_mgmt_compat { |
| __le16 frame_control; |
| __le16 duration; |
| u8 da[6]; |
| u8 sa[6]; |
| u8 bssid[6]; |
| __le16 seq_ctrl; |
| union { |
| struct { |
| u8 category; |
| union { |
| struct { |
| u8 action_code; |
| u8 dialog_token; |
| u8 status_code; |
| u8 variable[0]; |
| } __attribute__ ((packed)) wme_action; |
| struct{ |
| u8 action_code; |
| u8 dialog_token; |
| __le16 capab; |
| __le16 timeout; |
| __le16 start_seq_num; |
| } __attribute__((packed)) addba_req; |
| struct{ |
| u8 action_code; |
| u8 dialog_token; |
| __le16 status; |
| __le16 capab; |
| __le16 timeout; |
| } __attribute__((packed)) addba_resp; |
| struct{ |
| u8 action_code; |
| __le16 params; |
| __le16 reason_code; |
| } __attribute__((packed)) delba; |
| struct{ |
| u8 action_code; |
| /* capab_info for open and confirm, |
| * reason for close |
| */ |
| __le16 aux; |
| /* Followed in plink_confirm by status |
| * code, AID and supported rates, |
| * and directly by supported rates in |
| * plink_open and plink_close |
| */ |
| u8 variable[0]; |
| } __attribute__((packed)) plink_action; |
| struct{ |
| u8 action_code; |
| u8 variable[0]; |
| } __attribute__((packed)) mesh_action; |
| struct { |
| u8 action; |
| u8 smps_control; |
| } __attribute__ ((packed)) ht_smps; |
| } u; |
| } __attribute__ ((packed)) action; |
| } u; |
| } __attribute__ ((packed)); |
| #endif |