在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux GIC驅動數(shù)據(jù)結構分析

麥辣雞腿堡 ? 來源:LoyenWang ? 作者:LoyenWang ? 2023-09-28 15:18 ? 次閱讀

數(shù)據(jù)結構分析

先來張圖:

圖片

  • GIC驅動中,使用struct gic_chip_data結構體來描述GIC控制器的信息,整個驅動都是圍繞著該結構體的初始化,驅動中將函數(shù)指針都初始化好,實際的工作是由中斷信號觸發(fā),也就是在中斷來臨的時候去進行回調;
  • struct irq_chip結構,描述的是中斷控制器的底層操作函數(shù)集,這些函數(shù)集最終完成對控制器硬件的操作;
  • struct irq_domain結構,用于硬件中斷號和Linux IRQ中斷號(virq,虛擬中斷號)之間的映射;

還是上一下具體的數(shù)據(jù)結構代碼吧,關鍵注釋如下:

struct irq_chip {
	struct device	*parent_device;     //指向父設備
	const char	*name;      //  /proc/interrupts中顯示的名字
	unsigned int	(*irq_startup)(struct irq_data *data);  //啟動中斷,如果設置成NULL,則默認為enable
	void		(*irq_shutdown)(struct irq_data *data);     //關閉中斷,如果設置成NULL,則默認為disable
	void		(*irq_enable)(struct irq_data *data);   //中斷使能,如果設置成NULL,則默認為chip- >unmask
	void		(*irq_disable)(struct irq_data *data);  //中斷禁止


	void		(*irq_ack)(struct irq_data *data);  //開始新的中斷
	void		(*irq_mask)(struct irq_data *data); //中斷源屏蔽
	void		(*irq_mask_ack)(struct irq_data *data); //應答并屏蔽中斷
	void		(*irq_unmask)(struct irq_data *data);   //解除中斷屏蔽
	void		(*irq_eoi)(struct irq_data *data);  //中斷處理結束后調用


	int		(*irq_set_affinity)(struct irq_data *data, const struct cpumask *dest, bool force); //在SMP中設置CPU親和力
	int		(*irq_retrigger)(struct irq_data *data);    //重新發(fā)送中斷到CPU
	int		(*irq_set_type)(struct irq_data *data, unsigned int flow_type); //設置中斷觸發(fā)類型
	int		(*irq_set_wake)(struct irq_data *data, unsigned int on);    //使能/禁止電源管理中的喚醒功能


	void		(*irq_bus_lock)(struct irq_data *data); //慢速芯片總線上的鎖
	void		(*irq_bus_sync_unlock)(struct irq_data *data);  //同步釋放慢速總線芯片的鎖


	void		(*irq_cpu_online)(struct irq_data *data);
	void		(*irq_cpu_offline)(struct irq_data *data);


	void		(*irq_suspend)(struct irq_data *data);
	void		(*irq_resume)(struct irq_data *data);
	void		(*irq_pm_shutdown)(struct irq_data *data);


	void		(*irq_calc_mask)(struct irq_data *data);


	void		(*irq_print_chip)(struct irq_data *data, struct seq_file *p);
	int		(*irq_request_resources)(struct irq_data *data);
	void		(*irq_release_resources)(struct irq_data *data);


	void		(*irq_compose_msi_msg)(struct irq_data *data, struct msi_msg *msg);
	void		(*irq_write_msi_msg)(struct irq_data *data, struct msi_msg *msg);


	int		(*irq_get_irqchip_state)(struct irq_data *data, enum irqchip_irq_state which, bool *state);
	int		(*irq_set_irqchip_state)(struct irq_data *data, enum irqchip_irq_state which, bool state);


	int		(*irq_set_vcpu_affinity)(struct irq_data *data, void *vcpu_info);


	void		(*ipi_send_single)(struct irq_data *data, unsigned int cpu);
	void		(*ipi_send_mask)(struct irq_data *data, const struct cpumask *dest);


	unsigned long	flags;
};


struct irq_domain {
	struct list_head link;  //用于添加到全局鏈表irq_domain_list中
	const char *name;   //IRQ domain的名字
	const struct irq_domain_ops *ops;   //IRQ domain映射操作函數(shù)集
	void *host_data;    //在GIC驅動中,指向了irq_gic_data
	unsigned int flags; 
	unsigned int mapcount;  //映射中斷的個數(shù)


	/* Optional data */
	struct fwnode_handle *fwnode;
	enum irq_domain_bus_token bus_token;
	struct irq_domain_chip_generic *gc;
#ifdef	CONFIG_IRQ_DOMAIN_HIERARCHY
	struct irq_domain *parent;  //支持級聯(lián)的話,指向父設備
#endif
#ifdef CONFIG_GENERIC_IRQ_DEBUGFS
	struct dentry		*debugfs_file;
#endif


	/* reverse map data. The linear map gets appended to the irq_domain */
	irq_hw_number_t hwirq_max;  //IRQ domain支持中斷數(shù)量的最大值
	unsigned int revmap_direct_max_irq;
	unsigned int revmap_size;   //線性映射的大小
	struct radix_tree_root revmap_tree; //Radix Tree映射的根節(jié)點
	unsigned int linear_revmap[];   //線性映射用到的查找表
};


struct irq_domain_ops {
	int (*match)(struct irq_domain *d, struct device_node *node,
		     enum irq_domain_bus_token bus_token);      // 用于中斷控制器設備與IRQ domain的匹配
	int (*select)(struct irq_domain *d, struct irq_fwspec *fwspec,
		      enum irq_domain_bus_token bus_token);
	int (*map)(struct irq_domain *d, unsigned int virq, irq_hw_number_t hw);    //用于硬件中斷號與Linux中斷號的映射
	void (*unmap)(struct irq_domain *d, unsigned int virq);
	int (*xlate)(struct irq_domain *d, struct device_node *node,
		     const u32 *intspec, unsigned int intsize,
		     unsigned long *out_hwirq, unsigned int *out_type);     //通過device_node,解析硬件中斷號和觸發(fā)方式


#ifdef	CONFIG_IRQ_DOMAIN_HIERARCHY
	/* extended V2 interfaces to support hierarchy irq_domains */
	int (*alloc)(struct irq_domain *d, unsigned int virq,
		     unsigned int nr_irqs, void *arg);
	void (*free)(struct irq_domain *d, unsigned int virq,
		     unsigned int nr_irqs);
	void (*activate)(struct irq_domain *d, struct irq_data *irq_data);
	void (*deactivate)(struct irq_domain *d, struct irq_data *irq_data);
	int (*translate)(struct irq_domain *d, struct irq_fwspec *fwspec,
			 unsigned long *out_hwirq, unsigned int *out_type);
#endif
};
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 控制器
    +關注

    關注

    114

    文章

    16998

    瀏覽量

    183144
  • 嵌入式
    +關注

    關注

    5142

    文章

    19561

    瀏覽量

    315408
  • Linux
    +關注

    關注

    87

    文章

    11469

    瀏覽量

    212904
  • 數(shù)據(jù)結構

    關注

    3

    文章

    573

    瀏覽量

    40624
  • gic
    gic
    +關注

    關注

    0

    文章

    14

    瀏覽量

    6353
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    數(shù)據(jù)結構與算法分析(Java版)(pdf)

    數(shù)據(jù)結構與算法分析(Java版)(pdf)http://www.ibeifeng.com/read.php?tid=4812&u=73481【中文】Java數(shù)據(jù)結構和算法中文第二
    發(fā)表于 12-20 21:22

    數(shù)據(jù)結構與算法分析

    數(shù)據(jù)結構與算法分析
    發(fā)表于 06-05 10:46

    數(shù)據(jù)結構與算法分析:C語音第二版

    數(shù)據(jù)結構與算法分析:C語音第二版,經(jīng)典資料與你分析
    發(fā)表于 12-10 10:57

    基于公共數(shù)據(jù)結構的EDA仿真波形分析技術

    基于公共數(shù)據(jù)結構的EDA仿真波形分析技術:現(xiàn)有的EDA仿真工具缺乏對仿真數(shù)據(jù)分析處理功能,影響了仿真分析的效率。本文提出一種基于公共波形
    發(fā)表于 10-23 16:49 ?21次下載

    C#數(shù)據(jù)結構和算法分析_ 魏寶剛

    數(shù)據(jù)結構與算法分析》描述了各種類型的數(shù)據(jù)結構,包括線性表、樹、堆、圖,以及查找、排序等算法。自始至終將數(shù)據(jù)結構的基本原理與算法分析緊密結合
    發(fā)表于 12-15 16:46 ?0次下載
    C#<b class='flag-5'>數(shù)據(jù)結構</b>和算法<b class='flag-5'>分析</b>_ 魏寶剛

    數(shù)據(jù)結構是什么_數(shù)據(jù)結構有什么用

    數(shù)據(jù)結構是計算機存儲、組織數(shù)據(jù)的方式。數(shù)據(jù)結構是指相互之間存在一種或多種特定關系的數(shù)據(jù)元素的集合。通常情況下,精心選擇的數(shù)據(jù)結構可以帶來更高
    發(fā)表于 11-17 14:45 ?1.6w次閱讀
    <b class='flag-5'>數(shù)據(jù)結構</b>是什么_<b class='flag-5'>數(shù)據(jù)結構</b>有什么用

    什么是數(shù)據(jù)結構?為什么要學習數(shù)據(jù)結構數(shù)據(jù)結構的應用實例分析

    本文檔的主要內容詳細介紹的是什么是數(shù)據(jù)結構?為什么要學習數(shù)據(jù)結構數(shù)據(jù)結構的應用實例分析包括了:數(shù)據(jù)結構在串口通信當中的應用,
    發(fā)表于 09-26 15:45 ?14次下載
    什么是<b class='flag-5'>數(shù)據(jù)結構</b>?為什么要學習<b class='flag-5'>數(shù)據(jù)結構</b>?<b class='flag-5'>數(shù)據(jù)結構</b>的應用實例<b class='flag-5'>分析</b>

    Linux 內核數(shù)據(jù)結構:位圖(Bitmap)

    除了各種鏈式和樹形數(shù)據(jù)結構Linux內核還提供了位圖接口。位圖在Linux內核中大量使用。下面的源代碼文件包含這些結構的通用接口。
    發(fā)表于 05-14 17:24 ?3602次閱讀

    你知道Linux內核數(shù)據(jù)結構中雙向鏈表的作用?

    Linux 內核提供一套雙向鏈表的實現(xiàn),你可以在 include/linux/list.h 中找到。我們以雙向鏈表著手開始介紹 Linux 內核中的數(shù)據(jù)結構 ,因為這個是在
    發(fā)表于 05-14 17:27 ?1973次閱讀

    Linux0.11-進程控制塊數(shù)據(jù)結構

    嵌入式Linux中文站收集整理Linux0.11版本內核學習筆記,本文分析Linux進程控制模塊的數(shù)據(jù)結構
    發(fā)表于 05-15 15:22 ?1043次閱讀

    數(shù)據(jù)結構與算法分析—C語言描述

    數(shù)據(jù)結構與算法分析:C語言描述》曾被評為20世紀頂尖的30部計算機著作之一,作者在數(shù)據(jù)結構和算法分析方面卓有建樹,他的數(shù)據(jù)結構和算法
    發(fā)表于 10-14 08:00 ?17次下載
    <b class='flag-5'>數(shù)據(jù)結構</b>與算法<b class='flag-5'>分析</b>—C語言描述

    數(shù)據(jù)結構與算法分析——Java語言描述

    數(shù)據(jù)結構與算法分析——Java語言描述說明。
    發(fā)表于 05-31 14:25 ?22次下載

    Linux內核的鏈表數(shù)據(jù)結構

    Linux內核實現(xiàn)了自己的鏈表數(shù)據(jù)結構,它的設計與傳統(tǒng)的方式不同,非常巧妙也很通用。
    的頭像 發(fā)表于 03-24 11:34 ?1033次閱讀
    <b class='flag-5'>Linux</b>內核的鏈表<b class='flag-5'>數(shù)據(jù)結構</b>

    Linux內核代碼中常用的數(shù)據(jù)結構有哪些?

    Linux內核代碼中廣泛使用了數(shù)據(jù)結構和算法,其中最常用的兩個是鏈表和紅黑樹。
    發(fā)表于 07-20 09:39 ?669次閱讀

    Linux內核中使用的數(shù)據(jù)結構

    Linux內核代碼中廣泛使用了數(shù)據(jù)結構和算法,其中最常用的兩個是鏈表和紅黑樹。 鏈表 Linux內核代碼大量使用了鏈表這種數(shù)據(jù)結構。鏈表是在解決數(shù)組不能動態(tài)擴展這個缺陷而產(chǎn)生的一種
    的頭像 發(fā)表于 11-09 14:24 ?732次閱讀
    <b class='flag-5'>Linux</b>內核中使用的<b class='flag-5'>數(shù)據(jù)結構</b>
    主站蜘蛛池模板: 亚洲高清免费在线观看 | 午夜韩国理论片在线播放 | 窝窝午夜看片免费视频 | 天天做天天爱天天射 | 亚洲欧洲色天使日韩精品 | 久热网| 日韩a级毛片免费观看 | 久久久久国产一级毛片高清板 | 亚洲第一香蕉视频 | 天堂bt在线网bt | 久久精品高清视频 | 国产黄色小视频网站 | 激情玖玖 | 久久九色 | 国模人体一区二区三区 | 美女被猛男躁免费视频网站 | 免费在线亚洲 | 日日射夜夜 | 一色屋免费视频 | 性色欧美xo影院 | 亚洲最新在线 | 亚洲播放| 国产精品久久久久网站 | 激情综合婷婷丁香六月花 | 亚洲卡一卡2卡三卡4卡国色 | 国产精品午夜高清在线观看 | 就是操就是干 | 亚洲视频国产 | 韩国三级无遮挡床戏视频 | 色视频在线免费观看 | 女bbbbxxxx毛片视频丶 | 久久骚| 亚洲乱码尤物193yw在线播放 | www射| 四虎成人在线视频 | 日韩a无吗一区二区三区 | 69国产| 片黄免费 | 天天干天天拍天天操 | 4虎最新地址| 91在线免费视频 |