/* linux /arch /arm /plat-s5p /s3c-pl330.c ** Copyright(C)2010 Samsung Electronics Co. * * Jaswinder Singh< [email protected]> **このプログラムはフリーソフトウェアです。あなたはそれを再配布したり、Free Software Foundationによって発行されたGNU General Public Licenseの条件の下で変更することができます。ライセンスのバージョン2、または*(あなたの選択で)それ以降のバージョン**このプログラムは有用であることを期待して配布されていますが、*無保証です。 *商品性または特定の目的への適合性の暗黙の保証すらありません。詳しくは* GNU一般公衆利用許諾契約書を参照してください。**このプログラムと一緒にGNU一般公衆利用許諾契約書*のコピーを受け取っているはずです。そうでない場合は、米国マサチューセッツ州02139、ケンブリッジ、Mass Ave 675のFree Software * Foundation、Inc.にお書きください。* /
#include< linux /init.h> #include< linux /module .h> #include< linux /interrupt.h> #include< linux /io.h> #include< linux /platform_device.h>
#include< asm /hardware /pl330.h>;
#include< asm /dma.h>
#include< mach /dma.h>
#include< plat /s3c-pl330-pdata .h>
struct s3c_pl330_dmac {struct pl330_info * pi; /*現在ビジー状態のチャネル数* /unsigned busy_chan; /* DMACのグローバルリストに接続する* /struct list_headノード; /* IDのリスト周辺機器のこのDMACは* /enum dma_ch * peri; /* dmac * /struct kmem_cache * kmcache;}のすべてのチャネルにxfersをすばやく割り当てるために* poolを使用できます。
struct s3c_pl330_xfer {/*チャンネル上のxferのリスト* /struct list_headノード; /*このxferの所有者チャンネル* /struct s3c_pl330_chan * chan; /*クライアントから提供されたXfer ID * /void * token;
/* Xfer PL330 cor用e * /struct pl330_xfer px;};
struct s3c_pl330_chan {/*このチャネルと通信できるペリフェラルのID * /enum dma_ch id; /*チャネルのグローバルリストに接続するには* /struct list_head node; /*最後に送信されたPL330コアへのpl330_reqへのポインタ* /struct pl330_req * lrq;
/*キューに入れられたxfersのリストを管理するには* /struct list_head xfer_list; /*常に先頭のxferを指すof /queue * /struct s3c_pl330_xfer * xfer_head;
/*このチャンネルを管理するDMACへのポインタ、*チャンネルが取得可能な場合は* NULL * /struct s3c_pl330_dmac * dmac;
/* PL330 DMACのハードウェアチャネルスレッドのトークン*チャネルが取得可能な場合はNULL * /void * pl330_chan_id;
/* PL330エンジンと通信するための2つの要求* /struct pl330_req req [ ,null,null,3],2];
/*このチャネルのクライアント*チャネルを取得できる場合はNULL * /struct s3c2410_dma_client * client; /*クライアントへのコールバック関数* /s3c2410_dma_cbfn_t callback_fn; /*オプション指定クライアントによる編集* /unsigned intオプション; struct pl330_reqcfg rqcfg; /* s3c2410_dma_devconfig * /unsigned long sdaddrで提供されるアドレス;};
/*プラットフォーム内のすべてのDMAC * /static LIST_HEAD(dmac_list);
/*プラットフォーム内のペリフェラルへの全チャンネル* /static LIST_HEAD(chan_list);
/*グローバルプールにリソース(DMACとChannel)を追加するので、*アクセスを保護する必要があります。グローバルロックを使用してリソースにアクセスする* /static DEFINE_SPINLOCK(res_lock);
/* chan_listのID 'id'を持つチャネルを返す* /static struct s3c_pl330_chan * id_to_chan(const enum dma_ch id){struct s3c_pl330_chan * ch;
list_for_each_entry(ch、& chan_list、node)if(ch-> id == id)return ch;
return NULL;}
/* IDが 'id'の新しいチャンネルを割り当ててchan_listに追加する* /static void chan_add(const enum dma_ch id){struct s3c_pl330_chan * ch = id_to_chan(id);
/*そのチャンネルが既に存在する場合は戻る* /if(ch)return;
ch = kmalloc(sizeof(* ch)、GFP_KERNEL); /*動作するように黙って返す他のチャンネルとの* /if(!ch)return;
ch-> id = id; ch-> dmac = NULL;
list_add_tail(& ch-> node、 & chan_list);}
/*チャンネルがまだどのクライアントにも取得されていない場合* /static bool chan_free(struct s3c_pl330_chan * ch){if(!ch)falseを返す。
/*チャネルはDMACを取得したときのみそのDMACを指します* /return ch-> dmac? false:true;}
/*
パブリックIPは、InterNICによって割り当てられ、クラスベースのネットワークIDまたはCIDRベースのアドレスブロック(CIDRブロックと呼ばれる)で構成され、グローバルインターネットで保証され
を使用しています Ext2FsdはLinuxパーティションの読み書きに適したツールです。このソフトウェアは「Windows環境でのLinuxパーティションツールの読み書き」で紹介されています。プラット
ACLは、アクセス制御リストの略語です、主な目的は、詳細な権限に加えて、伝統的な所有者、グループ、他の人の読み取り、書き込み、実行権限を提供することです。 ACLを使用して、単一のユーザー、単一のファ
やっても大丈夫ですが、幸いなことに、パスワードは私のブートローダを変更するのにも必要です。誰もが注意を払うべきです! 最後の手順で「終了」と入力すると、コンピュータは自動的に再起動し、ro