pci.c (87a0b2fafc09766d8c55461a18345a1cfb10a7fe) | pci.c (861e58c8fc6be0e1319525b5e9a27a0d2e776210) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause 2/* Copyright(c) 2020 Realtek Corporation 3 */ 4 5#include <linux/pci.h> 6 7#include "mac.h" 8#include "pci.h" --- 2918 unchanged lines hidden (view full) --- 2927 .deinit = rtw89_pci_ops_deinit, 2928 2929 .check_and_reclaim_tx_resource = rtw89_pci_check_and_reclaim_tx_resource, 2930 .mac_lv1_rcvy = rtw89_pci_ops_mac_lv1_recovery, 2931 .dump_err_status = rtw89_pci_ops_dump_err_status, 2932 .napi_poll = rtw89_pci_napi_poll, 2933}; 2934 | 1// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause 2/* Copyright(c) 2020 Realtek Corporation 3 */ 4 5#include <linux/pci.h> 6 7#include "mac.h" 8#include "pci.h" --- 2918 unchanged lines hidden (view full) --- 2927 .deinit = rtw89_pci_ops_deinit, 2928 2929 .check_and_reclaim_tx_resource = rtw89_pci_check_and_reclaim_tx_resource, 2930 .mac_lv1_rcvy = rtw89_pci_ops_mac_lv1_recovery, 2931 .dump_err_status = rtw89_pci_ops_dump_err_status, 2932 .napi_poll = rtw89_pci_napi_poll, 2933}; 2934 |
2935static int rtw89_pci_probe(struct pci_dev *pdev, 2936 const struct pci_device_id *id) | 2935int rtw89_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) |
2937{ 2938 struct ieee80211_hw *hw; 2939 struct rtw89_dev *rtwdev; | 2936{ 2937 struct ieee80211_hw *hw; 2938 struct rtw89_dev *rtwdev; |
2939 const struct rtw89_driver_info *info; |
|
2940 int driver_data_size; 2941 int ret; 2942 2943 driver_data_size = sizeof(struct rtw89_dev) + sizeof(struct rtw89_pci); 2944 hw = ieee80211_alloc_hw(driver_data_size, &rtw89_ops); 2945 if (!hw) { 2946 dev_err(&pdev->dev, "failed to allocate hw\n"); 2947 return -ENOMEM; --- 4 unchanged lines hidden (view full) --- 2952 rtwdev->dev = &pdev->dev; 2953 rtwdev->hci.ops = &rtw89_pci_ops; 2954 rtwdev->hci.type = RTW89_HCI_TYPE_PCIE; 2955 rtwdev->hci.rpwm_addr = R_AX_PCIE_HRPWM; 2956 rtwdev->hci.cpwm_addr = R_AX_CPWM; 2957 2958 SET_IEEE80211_DEV(rtwdev->hw, &pdev->dev); 2959 | 2940 int driver_data_size; 2941 int ret; 2942 2943 driver_data_size = sizeof(struct rtw89_dev) + sizeof(struct rtw89_pci); 2944 hw = ieee80211_alloc_hw(driver_data_size, &rtw89_ops); 2945 if (!hw) { 2946 dev_err(&pdev->dev, "failed to allocate hw\n"); 2947 return -ENOMEM; --- 4 unchanged lines hidden (view full) --- 2952 rtwdev->dev = &pdev->dev; 2953 rtwdev->hci.ops = &rtw89_pci_ops; 2954 rtwdev->hci.type = RTW89_HCI_TYPE_PCIE; 2955 rtwdev->hci.rpwm_addr = R_AX_PCIE_HRPWM; 2956 rtwdev->hci.cpwm_addr = R_AX_CPWM; 2957 2958 SET_IEEE80211_DEV(rtwdev->hw, &pdev->dev); 2959 |
2960 switch (id->driver_data) { 2961 case RTL8852A: 2962 rtwdev->chip = &rtw8852a_chip_info; 2963 break; 2964 default: 2965 return -ENOENT; 2966 } | 2960 info = (const struct rtw89_driver_info *)id->driver_data; 2961 rtwdev->chip = info->chip; |
2967 2968 ret = rtw89_core_init(rtwdev); 2969 if (ret) { 2970 rtw89_err(rtwdev, "failed to initialise core\n"); 2971 goto err_release_hw; 2972 } 2973 2974 ret = rtw89_pci_claim_device(rtwdev, pdev); --- 42 unchanged lines hidden (view full) --- 3017 rtw89_pci_declaim_device(rtwdev, pdev); 3018err_core_deinit: 3019 rtw89_core_deinit(rtwdev); 3020err_release_hw: 3021 ieee80211_free_hw(hw); 3022 3023 return ret; 3024} | 2962 2963 ret = rtw89_core_init(rtwdev); 2964 if (ret) { 2965 rtw89_err(rtwdev, "failed to initialise core\n"); 2966 goto err_release_hw; 2967 } 2968 2969 ret = rtw89_pci_claim_device(rtwdev, pdev); --- 42 unchanged lines hidden (view full) --- 3012 rtw89_pci_declaim_device(rtwdev, pdev); 3013err_core_deinit: 3014 rtw89_core_deinit(rtwdev); 3015err_release_hw: 3016 ieee80211_free_hw(hw); 3017 3018 return ret; 3019} |
3020EXPORT_SYMBOL(rtw89_pci_probe); |
|
3025 | 3021 |
3026static void rtw89_pci_remove(struct pci_dev *pdev) | 3022void rtw89_pci_remove(struct pci_dev *pdev) |
3027{ 3028 struct ieee80211_hw *hw = pci_get_drvdata(pdev); 3029 struct rtw89_dev *rtwdev; 3030 3031 rtwdev = hw->priv; 3032 3033 rtw89_pci_free_irq(rtwdev, pdev); 3034 rtw89_core_napi_deinit(rtwdev); 3035 rtw89_core_unregister(rtwdev); 3036 rtw89_pci_clear_resource(rtwdev, pdev); 3037 rtw89_pci_declaim_device(rtwdev, pdev); 3038 rtw89_core_deinit(rtwdev); 3039 ieee80211_free_hw(hw); 3040} | 3023{ 3024 struct ieee80211_hw *hw = pci_get_drvdata(pdev); 3025 struct rtw89_dev *rtwdev; 3026 3027 rtwdev = hw->priv; 3028 3029 rtw89_pci_free_irq(rtwdev, pdev); 3030 rtw89_core_napi_deinit(rtwdev); 3031 rtw89_core_unregister(rtwdev); 3032 rtw89_pci_clear_resource(rtwdev, pdev); 3033 rtw89_pci_declaim_device(rtwdev, pdev); 3034 rtw89_core_deinit(rtwdev); 3035 ieee80211_free_hw(hw); 3036} |
3037EXPORT_SYMBOL(rtw89_pci_remove); |
|
3041 | 3038 |
3042static const struct pci_device_id rtw89_pci_id_table[] = { 3043 { PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8852), .driver_data = RTL8852A }, 3044 { PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0xa85a), .driver_data = RTL8852A }, 3045 {}, 3046}; 3047MODULE_DEVICE_TABLE(pci, rtw89_pci_id_table); 3048 3049static struct pci_driver rtw89_pci_driver = { 3050 .name = "rtw89_pci", 3051 .id_table = rtw89_pci_id_table, 3052 .probe = rtw89_pci_probe, 3053 .remove = rtw89_pci_remove, 3054 .driver.pm = &rtw89_pm_ops, 3055}; 3056module_pci_driver(rtw89_pci_driver); 3057 | |
3058MODULE_AUTHOR("Realtek Corporation"); 3059MODULE_DESCRIPTION("Realtek 802.11ax wireless PCI driver"); 3060MODULE_LICENSE("Dual BSD/GPL"); | 3039MODULE_AUTHOR("Realtek Corporation"); 3040MODULE_DESCRIPTION("Realtek 802.11ax wireless PCI driver"); 3041MODULE_LICENSE("Dual BSD/GPL"); |