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");