The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

Краткая справка

Краткая справка

Предыдущая  Содержание  Следующая V*D*V

#include <linux/fs.h>

int register_blkdev(unsigned int major, const char *name);

int unregister_blkdev(unsigned int major, const char *name);

register_blkdev регистрирует блочный драйвер в ядре и, при необходимости, получает старший номер. Драйвер может быть разрегистрирован с помощью unregister_blkdev.

struct block_device_operations

Структура, которая содержит большинство методов для блочных драйверов.

 

#include <linux/genhd.h>

struct gendisk;

Структура, которая описывает единственное блочное устройство в ядре.

struct gendisk *alloc_disk(int minors);

void add_disk(struct gendisk *gd);

Функции, которые выделяют структуры gendisk и возвращают их в систему.

void set_capacity(struct gendisk *gd, sector_t sectors);

Сохраняет объём устройства (в секторах по 512 байт) в структуре gendisk.

void add_disk(struct gendisk *gd);

Добавляет в ядро диск. Как только эта функция вызвана, ваши методы диска могут быть использованы ядром.

int check_disk_change(struct block_device *bdev);

Функция ядра, которая проверяет смену носителя в данном дисковом накопителе и принимает необходимые меры по очистке при обнаружении таких изменений.

 

#include <linux/blkdev.h>

request_queue_t blk_init_queue(request_fn_proc *request, spinlock_t *lock);

void blk_cleanup_queue(request_queue_t *);

Функции, которые занимаются созданием и удалением очередей блочного запроса.

struct request *elv_next_request(request_queue_t *queue);

void end_request(struct request *req, int success);

elv_next_request получает следующий запрос от очереди запросов; end_request может быть использована в очень простых драйверах, чтобы отметить полное завершение (или частичное) запроса.

void blkdev_dequeue_request(struct request *req);

void elv_requeue_request(request_queue_t *queue, struct request *req);

Функции, которые удаляют запрос из очереди и помещают его обратно в случае необходимости.

void blk_stop_queue(request_queue_t *queue);

void blk_start_queue(request_queue_t *queue);

Если вам необходимо предотвратить дальнейшие вызовы вашего метода request, вызов blk_stop_queue выполняет этот трюк. Вызов blk_start_queue необходим, чтобы снова вызвать ваш метод request.

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

Функции, которые устанавливают разные параметры очереди, управляющие тем, как создаются запросы для данного устройства; параметры описаны в разделе "Функции управления очередью".

 

#include <linux/bio.h>

struct bio;

Низкоуровневая структура, представляющая собой часть запроса блочного ввода/вывода.

bio_sectors(struct bio *bio);

bio_data_dir(struct bio *bio);

Два макроса, которые дают размер и направление передачи, описываемой структурой bio.

bio_for_each_segment(bvec, bio, segno);

Псевдоуправляющая структура, использующая для прохода по сегментам, которые составляют структуру bio.

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.

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.

void blk_queue_ordered(request_queue_t *queue, int flag);

int blk_barrier_rq(struct request *req);

Вызывайте blk_queue_ordered, если ваш драйвер реализует барьерные запросы, как это необходимо. Макрос blk_barrier_rq возвращает ненулевое значение, если текущий запрос является барьерным запросом.

int blk_noretry_request(struct request *req);

Этот макрос возвращает ненулевое значение, если данный запрос не должен быть повторен в случае ошибок.

int end_that_request_first(struct request *req, int success, int count);

void end_that_request_last(struct request *req);

Используйте end_that_request_first для сообщения о завершении части запроса блочного ввода/вывода. Когда эта функция возвращает 0, запрос является завершённым и должен быть передан в end_that_request_last.

rq_for_each_bio(bio, request)

Другое реализованное в виде макроса управление структурой; он проходит по всем bio, которые составляют запрос.

int blk_rq_map_sg(request_queue_t *queue, struct request *req, struct scatterlist *list);

Заполняет данный список разборки информацией, необходимой для отображения буферов данного запроса для DMA передачи.

typedef int (make_request_fn) (request_queue_t *q, struct bio *bio);

Прототип функции make_request.

void bio_endio(struct bio *bio, unsigned int bytes, int error);

Сигнал завершения для данной bio. Эта функция должна использоваться только если ваш драйвер получил bio непосредственно из  блочного уровня через функцию make_request.

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.

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.

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

Функции поддержки для драйверов, использующих очереди помеченных команд.

Предыдущая  Содержание  Следующая