first commit for chrg
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2022, RT-Thread Development Team
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2022-10-24 GuEe-GUI first version
|
||||
*/
|
||||
|
||||
#include <rtthread.h>
|
||||
|
||||
#include "../ecam.h"
|
||||
|
||||
rt_err_t pci_host_common_probe(struct rt_platform_device *pdev)
|
||||
{
|
||||
void *base;
|
||||
rt_err_t err;
|
||||
struct rt_device *dev = &pdev->parent;
|
||||
struct pci_ecam_config_window *conf_win;
|
||||
struct rt_pci_host_bridge *host_bridge = rt_pci_host_bridge_alloc(0);
|
||||
|
||||
if (!host_bridge)
|
||||
{
|
||||
return -RT_ENOMEM;
|
||||
}
|
||||
|
||||
if (!(base = rt_dm_dev_iomap(dev, 0)))
|
||||
{
|
||||
err = -RT_EIO;
|
||||
goto _fail;
|
||||
}
|
||||
|
||||
host_bridge->parent.ofw_node = dev->ofw_node;
|
||||
|
||||
if ((err = rt_pci_host_bridge_init(host_bridge)))
|
||||
{
|
||||
goto _fail;
|
||||
}
|
||||
|
||||
host_bridge->sysdata = conf_win = pci_ecam_create(host_bridge,
|
||||
(const struct pci_ecam_ops *)pdev->id->data);
|
||||
|
||||
if (!conf_win)
|
||||
{
|
||||
err = -RT_ENOMEM;
|
||||
goto _fail;
|
||||
}
|
||||
|
||||
conf_win->win = base;
|
||||
conf_win->priv = host_bridge;
|
||||
|
||||
if ((err = rt_pci_host_bridge_probe(host_bridge)))
|
||||
{
|
||||
goto _fail;
|
||||
}
|
||||
|
||||
dev->user_data = host_bridge;
|
||||
|
||||
return RT_EOK;
|
||||
|
||||
_fail:
|
||||
if (base)
|
||||
{
|
||||
rt_iounmap(base);
|
||||
}
|
||||
rt_pci_host_bridge_free(host_bridge);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
rt_err_t pci_host_common_remove(struct rt_platform_device *pdev)
|
||||
{
|
||||
struct pci_ecam_config_window *conf_win;
|
||||
struct rt_pci_host_bridge *host_bridge = pdev->parent.user_data;
|
||||
|
||||
rt_pci_host_bridge_remove(host_bridge);
|
||||
|
||||
conf_win = host_bridge->sysdata;
|
||||
|
||||
rt_iounmap(conf_win->win);
|
||||
rt_pci_host_bridge_free(host_bridge);
|
||||
|
||||
return RT_EOK;
|
||||
}
|
||||
Reference in New Issue
Block a user