---
title: 默认场景
description: "1. 申请队列前，和  默认场景"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/251RC1/accel/kunpengaccel_17_0021.html
sourcePath: /source/zh/kunpengboostkithistory/251RC1/accel/kunpengaccel_17_0021.html
indexId: f6c9bf8a18abec62f7e6beac908ba9a61f083296cba8dfbb2c19415f1a2c241d72
---
# 默认场景

1. 申请队列前，和  默认场景
一样，声明一个struct wd_queue的结构体变量并在这个成员变量capa的成员变量alg中指定需要的算法字符串。
2. 申请队列时，和章节  默认场景
一样，取第1步struct wd_queue结构体变量的地址作为参数，调用int wd_request_queue(struct wd_queue *q)申请指定算法的队列。
3. 创建算法context时，取第1步struct wd_queue结构体变量的地址作为参数，调用wcrypto_create_digest_ctx函数创建context，成功则返回一个指向context的void *指针，失败则返回空指针。
4. 调用算法操作前，声明一个该算法的操作结构体struct wcrypto_digest_op_data变量（结构体定义如下，细节请参考  HASH算法类相关接口
），根据需求申请好合适大小的内存给in、out，并将需要操作的数据填入in，或者把in、out指向已申请好的内存，并指定in_bytes，out_bytes大小。处理完之后由用户负责释放这些内存。
  1 2 3 4 5 6 7 8 9 struct wcrypto_digest_op_data{ void *in; void *out; __u32 in_bytes; __u32 out_bytes; void *priv; int status; bool has_next; };

5. 调用算法操作通知硬件执行算法处理数据时，取第3步返回的context指针和第4步struct wcrypto_digest_op_data变量地址作为参数，调用wcrypto_do_digest函数将数据通过WD基础层send/recv接口交给加速器硬件处理，成功则返回0，并将硬件处理好的数据填到第4步struct wcrypto_digest_op_data变量的成员变量out中；失败则返回负值。
6. 释放算法context前，用户处理完加速器返回的数据之后，释放第4步中涉及到的in、out内存。
7. 释放算法context时，取第3步返回的context指针作为参数，调用wcrypto_del_digest_ctx函数释放context。
8. 释放队列时，取第1步struct wd_queue结构体变量的地址作为参数，调用void wd_release_queue(struct wd_queue *q)释放队列和涉及到的硬件资源。
