Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
|
|
#include <linux></linux>fs.h> int register_blkdev(unsigned int major, const char *name); int unregister_blkdev(unsigned int major, const char *name);
hardorsoft
26.10.10 в 00:52
|
|
Функция register_blkdev регистрирует драйвер блочного устройства в ядре, и, опционально, выделяет старший номер. Отмена регистрации выполняется функцией unregister_blkdev.
hardorsoft
26.10.10 в 00:52
|
|
struct block_device_operations Структура содержит большинство устройства.
hardorsoft
26.10.10 в 00:52
|
|
#include <linux></linux>genhd.h> struct gendisk; Структура описывает одно блочное устройство.
hardorsoft
26.10.10 в 00:52
|
|
struct gendisk *alloc_disk(int minors); void add_disk(struct gendisk *gd); Функции для выделения структуры gendisk, и для передачи ее системе.
hardorsoft
26.10.10 в 00:53
|
|
void set_capacity(struct gendisk *gd, sector_t sectors); Устанавливает емкость устройства в 512-байтных секторах для структуры gendisk.
hardorsoft
26.10.10 в 00:53
|
|
void add_disk(struct gendisk *gd); Добавляет диск в ядро. Как только вызывается эта функция, методы вашего устройства могут быть использованы ядром.
hardorsoft
26.10.10 в 00:53
|
|
int check_disk_change(struct block_device *bdev); Функция ядра, проверяет смену носителя в устройстве и, если она произошла, производит необходимые действия.
hardorsoft
26.10.10 в 00:53
|
|
#include <linux></linux>blkdev.h> request_queue_t blk_init_queue(request_fn_proc *request, spinlock_t *lock); void blk_cleanup_queue(request_queue_t *); Функции выполняют создание или удаление очереди запросов.
hardorsoft
26.10.10 в 00:54
|
|
struct request *elv_next_request(request_queue_t *queue); void end_request(struct request *req, int success); Функции elv_next_request получает следующий запрос из очереди. end_request может использоваться в простых драйверах для пометки выполнения запроса или его части.
hardorsoft
26.10.10 в 00:54
|
|
void blkdev_dequeue_request(struct request *req); void elv_requeue_request(request_queue_t *queue, struct request *req); Функции для удаления запроса из очереди, и помещения его обратно.
hardorsoft
26.10.10 в 00:54
|
|
void blk_stop_queue(request_queue_t *queue); void blk_start_queue(request_queue_t *queue); Если вам необходимо предотвратить будущие вызовы метода request, вызовете функцию blk_stop_queue. После выполенения blk_start_queue метод request будет снова вызываться.
hardorsoft
26.10.10 в 00:55
|
|
void blk_queue_bounce_limit(request_queue_t *queue, u64 dma_addr); void blk_queue_max_sectors(request_queue_t *queue, unsigned short max); void blk_queue_max_phys_segments(request_queue_t *queue, unsigned short max); void blk_queue_max_hw_segments(request_queue_t *queue, unsigned short max); void blk_queue_max_segment_size(request_queue_t *queue, unsigned int max); blk_queue_segment_boundary(request_queue_t *queue, unsigned long mask); void blk_queue_dma_alignment(request_queue_t *queue, int mask); void blk_queue_hardsect_size(request_queue_t *queue, unsigned short max); Функции устанавливают различные параметры очереди, управляющие созданием запросов. Параметры описаны в разделе «Функции управления очередью»
hardorsoft
26.10.10 в 00:55
|
|
#include <linux></linux>bio.h> struct bio; Низкоуровневая структура, являющаяся частью запроса блочного ввода-вывода.
hardorsoft
26.10.10 в 00:55
|
|
bio_sectors(struct bio *bio); bio_data_dir(struct bio *bio); Макросы предоставляют размер и направление передачи данных в структуре bio.
hardorsoft
26.10.10 в 00:55
|
|
bio_for_each_segment(bvec, bio, segno); Макрос псевдоуправления, используется в качестве проходящего по всем сегментам структуры bio.
hardorsoft
26.10.10 в 00:56
|
|
char *__bio_kmap_atomic(struct bio *bio, int i, enum km_type type); void __bio_kunmap_atomic(char *buffer, enum km_type type); Функция __bio_kmap_atomic может быть использована для создания виртуального адреса сегмента, полученного из структуры bio. Отмена отображения должно производится __bio_kunmap_atomic.
hardorsoft
26.10.10 в 00:56
|
|
struct page *bio_page(struct bio *bio); int bio_offset(struct bio *bio); int bio_cur_sectors(struct bio *bio); char *bio_data(struct bio *bio); char *bio_kmap_irq(struct bio *bio, unsigned long *flags); void bio_kunmap_irq(char *buffer, unsigned long *flags); Множество макросов, предоставляющих доступ к текущему сегменту структуры bio.
hardorsoft
26.10.10 в 00:56
|
|
void blk_queue_ordered(request_queue_t *queue, int flag); int blk_barrier_rq(struct request *req); Выполните функцию blk_queue_ordered, если ваш драйвер реализует экранирование запросов. Макрос blk_barrier_rq возвращает не нулевое значение, если текущий запрос экранируется.
hardorsoft
26.10.10 в 00:56
|
|
int blk_noretry_request(struct request *req); Этот макрос возвращает не нулевое значение, если данный запрос не может выполняться повторно в случае ошибки.
hardorsoft
26.10.10 в 00:57
|
|
int end_that_request_first(struct request *req, int success, int count); void end_that_request_last(struct request *req); Функция end_that_request_first используется для индикации завершения части запроса. Когда запрос выполнен полностью, функция возвращает ноль, и запрос может быть передан в end_that_request_last.
hardorsoft
26.10.10 в 00:57
|
|
rq_for_each_bio(bio, request) Еще один макрос. Позволяет пройти по всем bio, составляющим запрос request.
hardorsoft
26.10.10 в 00:57
|
|
int blk_rq_map_sg(request_queue_t *queue, struct request *req, struct scatterlist *list); Заполняет список сегментов scatterlist информацией для отображения буферов, составляющих запрос, для передачи ПДП.
hardorsoft
26.10.10 в 00:57
|
|
typedef int (make_request_fn) (request_queue_t *bio); Прототип функции make_request.
hardorsoft
26.10.10 в 00:57
|
|
void bio_endio(struct bio *bio, unsigned int bytes, int error); Сигнал выполнения для данного bio. Функция используется, только если ваш драйвер получает bio непосредственно от уровня блочных устройств, через функцию make_request.
hardorsoft
26.10.10 в 00:58
|
|
request_queue_t *blk_alloc_queue(int flags); void blk_queue_make_request(request_queue_t *queue, make_request_fn *func); Функция blk_alloc_queue используется для выделения очереди запросов которая используется с пользовательской функцией make_request. Эта функция blk_queue_make_request.
hardorsoft
26.10.10 в 00:59
|
|
typedef int (prep_rq_fn) (request_queue_t *queue, struct request *req); void blk_queue_prep_rq(request_queue_t *queue, prep_rq_fn *func); Прототип функции предварительной обработки команд и функция ее настройки. Функции предварительной обработки команд может быть использована для подготовки аппаратного обеспечения, перед передачей запроса в функцию request.
hardorsoft
26.10.10 в 00:59
|
|
int blk_queue_init_tags(request_queue_t *queue, int depth, struct blk_queue_tag *tags); int blk_queue_resize_tags(request_queue_t *queue, int new_depth); int blk_queue_start_tag(request_queue_t *queue, struct request *req); void blk_queue_end_tag(request_queue_t *queue, struct request *req); struct request *blk_queue_find_tag(request_queue_t *qeue, int tag); void blk_queue_invalidate_tags(request_queue_t *queue); Функции поддержки драйвера использующего пометку команд очереди (TCQ).
hardorsoft
26.10.10 в 00:59
|
|