162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci *   Copyright (C) 2018 Samsung Electronics Co., Ltd.
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#include "ksmbd_ida.h"
762306a36Sopenharmony_ci
862306a36Sopenharmony_cistatic inline int __acquire_id(struct ida *ida, int from, int to)
962306a36Sopenharmony_ci{
1062306a36Sopenharmony_ci	return ida_simple_get(ida, from, to, GFP_KERNEL);
1162306a36Sopenharmony_ci}
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ciint ksmbd_acquire_smb2_tid(struct ida *ida)
1462306a36Sopenharmony_ci{
1562306a36Sopenharmony_ci	int id;
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci	id = __acquire_id(ida, 1, 0xFFFFFFFF);
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci	return id;
2062306a36Sopenharmony_ci}
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ciint ksmbd_acquire_smb2_uid(struct ida *ida)
2362306a36Sopenharmony_ci{
2462306a36Sopenharmony_ci	int id;
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci	id = __acquire_id(ida, 1, 0);
2762306a36Sopenharmony_ci	if (id == 0xFFFE)
2862306a36Sopenharmony_ci		id = __acquire_id(ida, 1, 0);
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci	return id;
3162306a36Sopenharmony_ci}
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ciint ksmbd_acquire_async_msg_id(struct ida *ida)
3462306a36Sopenharmony_ci{
3562306a36Sopenharmony_ci	return __acquire_id(ida, 1, 0);
3662306a36Sopenharmony_ci}
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ciint ksmbd_acquire_id(struct ida *ida)
3962306a36Sopenharmony_ci{
4062306a36Sopenharmony_ci	return __acquire_id(ida, 0, 0);
4162306a36Sopenharmony_ci}
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_civoid ksmbd_release_id(struct ida *ida, int id)
4462306a36Sopenharmony_ci{
4562306a36Sopenharmony_ci	ida_simple_remove(ida, id);
4662306a36Sopenharmony_ci}
47